繁体   English   中英

如何使用休眠 <join><any> ?

[英]How to use hibernate <join><any>?

我正在阅读休眠参考,它们是休眠中的两个元素: <join><any> 阅读后,我不知道参考文献在说什么。

我不知道何时使用join / any,它们适合哪种情况? 对于<join />:设置“ fetch”时,休眠时将使用内部联接,何时将使用外部联接,何时将使用select? 哪些表使用哪些列? 对于提供的示例休眠引用,它说:<join table =“ ADDRESS”> <key column =“ ADDRESS_ID” /> <属性名称=“ address” /> <属性名称=“ zip” /> <属性名称= “ country” /> </ join>,那么哪一列用于联接这两个表?

为<join>设置fetch时,它说:fetch(可选-默认为join):如果设置为join,则默认情况下,Hibernate将使用内部联接来检索由类定义的<join>(我的问题:有人吗?请给我一个例子,说:这是哪个类?)或其超类((我的问题:有人可以给我一个例子,说:这是这个类吗?))),并为<join>定义一个外部联接一个子类((我的问题:有人可以给我一个例子说:这是哪个类?))。 如果设置为select,则Hibernate将对子类上定义的<join>使用顺序选择((我的问题:有人可以给我一个例子说:这是哪个类吗?)),仅当row代表子类的实例((我的问题:有人可以给我一个例子说:这是哪个类?))。 内部联接仍将用于检索由类及其超类定义的((我的问题:有人可以给我一个例子说:这是哪个类?))。

换句话说,我想知道下面所说的所有类是什么:fetch(可选-默认为join):如果设置为join,则默认情况下,Hibernate将使用内部联接来检索由类定义的<join>或它的超类和由子类定义的<join>的外部联接。 如果设置为select,则Hibernate将对在子类上定义的<join>使用顺序选择,只有当一行代表该子类的实例时才发出该选择。 内部联接仍将用于检索由类及其超类定义的<join>。

对于<any>,它适合哪种情况?您能解释一下它的工作原理吗? 有人提供示例并向我解释吗? 谢谢。

  • <join>用于将一个类映射为两个2+表,这些表在主键/ ID上具有一对一的关联

     Table A Table B ------- ------- id | name a_id | status class Foo { private int id; private string name; private string status; } <class name="Foo"> <id name="id"/> <property name="name"/> <join table="B"> <key column="a_id"/> <property name="status"/> </join> </class> 
  • <any>用于映射多态引用,例如,联系人可以引用其所属的用户或公司。 因此,它使用两列:一列是Company / User的ID,第二列是存储引用类型的参考,例如“ user”或“ company”。 优点是无需知道所有可能的表即可知道引用实体的类型(和表)

     Table Users Table Companies ---------- ------------- id | name id | trademark Table Contacts ----------------------- id | text | owner_id | owner_type class User/Company implements HasContacts { private int id; private string name/trademark; private Set<Contact> contacts; } class Contact { private int id; private string text; private HasContacts owner; } <class name="Contact"> <id name="id"/> <property name="name"/> <any name="owner" id-type="System.Int64" meta-type="System.String"> <meta-value value="user" class="User"/> <meta-value value="company" class="Company"/> <column name="owner_id"/> <column name="owner_type"/> </any> </class> <class name="User"> <id name="id"/> <property name="name"/> <set name="contacts" where="owner_type='user'"> <key column="owner_id"/> <one-to-many class="Contact"/> </set> </class> <class name="Company"> <id name="id"/> <property name="trademark"/> <set name="contacts" where="owner_type='company'"> <key column="owner_id"/> <one-to-many class="Contact"/> </set> </class> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM