Skip to content

Commit 000849a

Browse files
committed
Fix for Stateless Session 1:1 loading.
Signed-off-by: shoban <[email protected]>
1 parent 2f703d0 commit 000849a

File tree

6 files changed

+132
-3
lines changed

6 files changed

+132
-3
lines changed

.editorconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ indent_style = space
1717
indent_size = 2
1818

1919
[*.xml]
20-
indent_style = space
20+
indent_style = tab
2121
indent_size = 2
2222

2323
[*.csproj]
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
namespace NHibernate.Test.NHSpecificTest.GH1149
2+
{
3+
public class Company
4+
{
5+
public virtual int Id { get; set; }
6+
public virtual string Name { get; set; }
7+
public virtual Address Address { get; set; }
8+
}
9+
10+
public class Address
11+
{
12+
public Address()
13+
{
14+
}
15+
16+
public Address(Company company)
17+
{
18+
this.Company = company;
19+
}
20+
21+
public virtual int Id { get; set; }
22+
23+
public virtual Company Company { get; set; }
24+
25+
public virtual string AddressLine1 { get; set; }
26+
27+
}
28+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using NUnit.Framework;
2+
3+
namespace NHibernate.Test.NHSpecificTest.GH1149
4+
{
5+
[TestFixture]
6+
public class Fixture : BugTestCase
7+
{
8+
private int _companyId = 0;
9+
10+
protected override void OnSetUp()
11+
{
12+
base.OnSetUp();
13+
using (ISession session = OpenSession())
14+
{
15+
using (ITransaction tx = session.BeginTransaction())
16+
{
17+
var company = new Company { Name = "Test Company" };
18+
19+
company.Address = new Address(company) { AddressLine1 = "Company Address" };
20+
21+
_companyId = (int) session.Save(company);
22+
23+
tx.Commit();
24+
}
25+
}
26+
}
27+
28+
protected override void OnTearDown()
29+
{
30+
using (ISession session = OpenSession())
31+
using (ITransaction transaction = session.BeginTransaction())
32+
{
33+
session.Delete("from Address");
34+
session.Delete("from Company");
35+
session.Flush();
36+
transaction.Commit();
37+
}
38+
}
39+
40+
[Test]
41+
public void StatelessSessionLoadsOneToOneRelatedObject()
42+
{
43+
using (var stateless = Sfi.OpenStatelessSession())
44+
{
45+
var loadedCompany = stateless.Get<Company>(_companyId);
46+
47+
Assert.That(loadedCompany, Is.Not.Null);
48+
Assert.That(loadedCompany.Name, Is.Not.Null);
49+
Assert.That(loadedCompany.Address, Is.Not.Null);
50+
Assert.That(loadedCompany.Address.AddressLine1, Is.Not.Null);
51+
}
52+
}
53+
54+
}
55+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
3+
namespace="NHibernate.Test.NHSpecificTest.GH1149"
4+
assembly="NHibernate.Test">
5+
<class name="Company" >
6+
<id name="Id">
7+
<generator class="native"/>
8+
</id>
9+
<property name="Name" />
10+
11+
<one-to-one name="Address" class="Address" property-ref="Company" cascade="all-delete-orphan"/>
12+
13+
</class>
14+
15+
<class name="Address" >
16+
<id name="Id">
17+
<generator class="native"/>
18+
</id>
19+
<property name="AddressLine1" />
20+
21+
<many-to-one name="Company" class="Company" column="CompanyId" unique="true" />
22+
23+
</class>
24+
25+
</hibernate-mapping>

src/NHibernate.sln.DotSettings

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
2-
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CommonFormatter/ALIGNMENT_TAB_FILL_STYLE/@EntryValue">USE_SPACES</s:String>
2+
33
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGN_LINQ_QUERY/@EntryValue">True</s:Boolean>
44
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGN_MULTILINE_ARGUMENT/@EntryValue">True</s:Boolean>
55
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGN_MULTILINE_CALLS_CHAIN/@EntryValue">True</s:Boolean>
66
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGN_MULTILINE_PARAMETER/@EntryValue">True</s:Boolean>
77
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/EXPLICIT_INTERNAL_MODIFIER/@EntryValue">True</s:Boolean>
88
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/EXPLICIT_PRIVATE_MODIFIER/@EntryValue">True</s:Boolean>
99
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/LINE_FEED_AT_FILE_END/@EntryValue">True</s:Boolean>
10+
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_ACCESSOR_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String>
11+
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_ACCESSORHOLDER_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String>
1012
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE/@EntryValue">False</s:Boolean>
13+
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String>
1114
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_SIMPLE_ACCESSOR_ATTRIBUTE_ON_SAME_LINE/@EntryValue">False</s:Boolean>
1215
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_DECLARATION_LPAR/@EntryValue">True</s:Boolean>
1316
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_INVOCATION_LPAR/@EntryValue">True</s:Boolean>
@@ -20,9 +23,14 @@
2023
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /&gt;</s:String>
2124
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticReadonly/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
2225
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpAttributeForSingleLineMethodUpgrade/@EntryIndexedValue">True</s:Boolean>
26+
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
27+
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
28+
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpRenamePlacementToArrangementMigration/@EntryIndexedValue">True</s:Boolean>
2329
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
30+
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002ECSharpPlaceAttributeOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
2431
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
2532
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean>
33+
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EFormat_002ESettingsUpgrade_002EAlignmentTabFillStyleMigration/@EntryIndexedValue">True</s:Boolean>
2634
<s:Boolean x:Key="/Default/Environment/UnitTesting/SeparateAppDomainPerAssembly/@EntryValue">True</s:Boolean>
2735
<s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=0BE95D01E0F2244E97F5FEFAD1EB1A63/@KeyIndexDefined">True</s:Boolean>
2836
<s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=0BE95D01E0F2244E97F5FEFAD1EB1A63/Comment/@EntryValue">NUnit Assert.NotNull</s:String>

src/NHibernate/Impl/StatelessSessionImpl.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,20 @@ public override void AfterTransactionCompletion(bool successful, ITransaction tx
228228

229229
public override object GetContextEntityIdentifier(object obj)
230230
{
231-
return null;
231+
using (BeginProcess())
232+
{
233+
if (obj.IsProxy())
234+
{
235+
INHibernateProxy proxy = obj as INHibernateProxy;
236+
237+
return proxy.HibernateLazyInitializer.Identifier;
238+
}
239+
else
240+
{
241+
EntityEntry entry = temporaryPersistenceContext.GetEntry(obj);
242+
return (entry != null) ? entry.Id : null;
243+
}
244+
}
232245
}
233246

234247
public override object Instantiate(string clazz, object id)

0 commit comments

Comments
 (0)