Currencies ---------- CurrencyId INT IDENTITY PK IsoCode4217 CHAR(3) -- "USD", "GBP", "EUR", etc Users ---------- UserId INT IDENTITY PK CurrencyId FK REFERENCES Currencies (CurrencyId)
当前应用程序有一个Currency
对象,需要IsoCode4217
值。 Currency
不是此应用程序中的实体,它是自己奇怪的硬编码事物,我需要将IsoCode4217
值传递给静态函数并返回Currency
实例。数据库Currencies
表更多是枚举表。所以我想我只是实现一个IUserType
然后关闭我会去,但这不会像我期望的那样工作:
[hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"] [class name="BlahBlah.UserProfile, BlahBlah.Model" schema="Core" table="Users" lazy="false"] [id name="Identity" access="field.camelcase" column="UserId"] [generator class="native" /] [/id] [join schema="Core" table="Currencies" fetch="join"] [key column="CurrencyId" property-ref="Currency" /] [property name="Currency" column="IsoCode4217" type="BlahBlah.CurrencyUserType, BlahBlah.Model" /] [/join] [/class] [/hibernate-mapping]
(我将尖括号更改为常规括号,因为我不想考虑这个Markdown编辑器会做什么。)
我期望的SQL是
SELECT u.UserId, c.IsoCode4217 FROM Users AS u INNER JOIN Currencies AS c ON u.CurrencyId = c.CurrencyId
但NHibernate顽固地给了我
SELECT u.UserId, c.IsoCode4217 FROM Users AS u INNER JOIN Currencies AS c ON u.UserId = c.CurrencyId -- DANG IT!
这真的不受支持,还是我忽视了一些明显的东西?为了单个实体的映射,是否可以从另一个表中“循环”一个额外的列?
谢谢!
答案 0 :(得分:0)
加入映射是PITA!这里的问题是Hibernate期望连接映射从Parent表映射到Child表,而您从子表连接到父表。
本质上,连接映射旨在使连接具有一对一关系的表以及父表连接到子表的表很容易。
我认为在你的情况下你想要一个多对一的映射而不是一个连接