From 7a763beec9ec4554bd23be7de027e2760b9910ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Delaporte?=
<12201973+fredericDelaporte@users.noreply.github.com>
Date: Tue, 1 Oct 2024 20:53:56 +0200
Subject: [PATCH 1/2] Fix ByCode OneToOne XML serialization (#3613)
---
.../NHSpecificTest/GH3607/FixtureByCode.cs | 31 +++++++++++++++++++
.../NHSpecificTest/GH3607/LineItem.cs | 15 +++++++++
.../NHSpecificTest/GH3607/LineItemData.cs | 9 ++++++
.../GH3607/LineItemDataMapping.cs | 14 +++++++++
.../NHSpecificTest/GH3607/LineItemMapping.cs | 21 +++++++++++++
.../NHSpecificTest/GH3607/Order.cs | 14 +++++++++
.../NHSpecificTest/GH3607/OrderMapping.cs | 22 +++++++++++++
.../Cfg/MappingSchema/HbmOneToOne.cs | 4 +++
8 files changed, 130 insertions(+)
create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3607/FixtureByCode.cs
create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3607/LineItem.cs
create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3607/LineItemData.cs
create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3607/LineItemDataMapping.cs
create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3607/LineItemMapping.cs
create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3607/Order.cs
create mode 100644 src/NHibernate.Test/NHSpecificTest/GH3607/OrderMapping.cs
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3607/FixtureByCode.cs b/src/NHibernate.Test/NHSpecificTest/GH3607/FixtureByCode.cs
new file mode 100644
index 00000000000..0ce9b1a592c
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3607/FixtureByCode.cs
@@ -0,0 +1,31 @@
+using NHibernate.Cfg;
+using NHibernate.Cfg.MappingSchema;
+using NHibernate.Mapping.ByCode;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.GH3607
+{
+ ///
+ /// By code mapping serialization failure since v5.4.1. Adapted from .
+ ///
+ [TestFixture]
+ public class FixtureByCode : TestCaseMappingByCode
+ {
+ protected override HbmMapping GetMappings()
+ {
+ var mapper = new ModelMapper();
+ mapper.AddMappings(new[] { typeof(OrderMapping), typeof(LineItemMapping), typeof(LineItemDataMapping) });
+ return mapper.CompileMappingForAllExplicitlyAddedEntities();
+ }
+
+ [Test]
+ public void SerializeMappingToXml()
+ {
+ var mapping = GetMappings();
+ string serialized = "";
+ Assert.That(() => serialized = mapping.AsString(), Throws.Nothing, "Mapping serialization failure");
+ var config = new Configuration();
+ Assert.That(() => config.AddXml(serialized), Throws.Nothing, "Configuration with serialized mapping has failed");
+ }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3607/LineItem.cs b/src/NHibernate.Test/NHSpecificTest/GH3607/LineItem.cs
new file mode 100644
index 00000000000..146a7407b26
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3607/LineItem.cs
@@ -0,0 +1,15 @@
+namespace NHibernate.Test.NHSpecificTest.GH3607
+{
+ public class LineItem
+ {
+ public virtual int Id { get; set; }
+
+ public virtual Order ParentOrder { get; set; }
+
+ public virtual string ItemName { get; set; }
+
+ public virtual decimal Amount { get; set; }
+
+ public virtual LineItemData Data { get; set; }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3607/LineItemData.cs b/src/NHibernate.Test/NHSpecificTest/GH3607/LineItemData.cs
new file mode 100644
index 00000000000..5bcfa3ad64c
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3607/LineItemData.cs
@@ -0,0 +1,9 @@
+namespace NHibernate.Test.NHSpecificTest.GH3607
+{
+ public class LineItemData
+ {
+ public virtual LineItem LineItem { get; set; }
+
+ public virtual string Data { get; set; }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3607/LineItemDataMapping.cs b/src/NHibernate.Test/NHSpecificTest/GH3607/LineItemDataMapping.cs
new file mode 100644
index 00000000000..66634421a3b
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3607/LineItemDataMapping.cs
@@ -0,0 +1,14 @@
+using NHibernate.Mapping.ByCode.Conformist;
+
+namespace NHibernate.Test.NHSpecificTest.GH3607
+{
+ public class LineItemDataMapping : ClassMapping
+ {
+ public LineItemDataMapping()
+ {
+ OneToOne(x => x.LineItem, m => m.Constrained(true));
+
+ Property(x => x.Data);
+ }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3607/LineItemMapping.cs b/src/NHibernate.Test/NHSpecificTest/GH3607/LineItemMapping.cs
new file mode 100644
index 00000000000..3918b0a84f3
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3607/LineItemMapping.cs
@@ -0,0 +1,21 @@
+using NHibernate.Mapping.ByCode;
+using NHibernate.Mapping.ByCode.Conformist;
+
+namespace NHibernate.Test.NHSpecificTest.GH3607
+{
+ public class LineItemMapping : ClassMapping
+ {
+ public LineItemMapping()
+ {
+ Id(x => x.Id, m => m.Generator(new IdentityGeneratorDef()));
+
+ Property(x => x.ItemName);
+
+ Property(x => x.Amount);
+
+ ManyToOne(x => x.ParentOrder);
+
+ ManyToOne(x => x.Data);
+ }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3607/Order.cs b/src/NHibernate.Test/NHSpecificTest/GH3607/Order.cs
new file mode 100644
index 00000000000..be3b9d05ffc
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3607/Order.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+
+namespace NHibernate.Test.NHSpecificTest.GH3607
+{
+ public class Order
+ {
+ public virtual int Id { get; set; }
+
+ public virtual DateTime CreatedDate { get; set; }
+
+ public virtual ISet Items { get; protected set; } = new HashSet();
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH3607/OrderMapping.cs b/src/NHibernate.Test/NHSpecificTest/GH3607/OrderMapping.cs
new file mode 100644
index 00000000000..036c65e47a5
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH3607/OrderMapping.cs
@@ -0,0 +1,22 @@
+using NHibernate.Mapping.ByCode;
+using NHibernate.Mapping.ByCode.Conformist;
+
+namespace NHibernate.Test.NHSpecificTest.GH3607
+{
+ public class OrderMapping : ClassMapping
+ {
+ public OrderMapping()
+ {
+ Table("`Order`");
+ Id(x => x.Id, m => m.Generator(new IdentityGeneratorDef()));
+
+ Property(x => x.CreatedDate);
+
+ Set(x => x.Items, m =>
+ {
+ m.Inverse(true);
+ m.OptimisticLock(true);
+ }, a => a.OneToMany());
+ }
+ }
+}
diff --git a/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs b/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs
index e0740e17937..aec82a44ee4 100644
--- a/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs
+++ b/src/NHibernate/Cfg/MappingSchema/HbmOneToOne.cs
@@ -18,9 +18,13 @@ public string Access
get { return access; }
}
+ // 6.0 Todo : remove XmlIgnore after removing the setter. See #3607 fix.
+ [XmlIgnore]
public bool OptimisticLock
{
get => optimisticlock;
+ // Since v5.4.10
+ [Obsolete("Providing a setter for OptimisticLock was unintended and will be removed.")]
set => optimisticlock = value;
}
From ee854c3b506d49aa1da844e0c091a0d9fe9e7246 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Delaporte?=
<12201973+fredericDelaporte@users.noreply.github.com>
Date: Tue, 1 Oct 2024 20:55:20 +0200
Subject: [PATCH 2/2] Enable dev builds for 5.4.10
---
build-common/NHibernate.props | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/build-common/NHibernate.props b/build-common/NHibernate.props
index a04cab397a3..e08f2f1569d 100644
--- a/build-common/NHibernate.props
+++ b/build-common/NHibernate.props
@@ -3,9 +3,9 @@
5.4
- 9
+ 10
-
+ dev
9.0
$(NhVersion).$(VersionPatch)