请问Hibernate怎么实现表与表之间的关连?
比如这个SQL语句:
select A.ID,A.Name FROM A WHERE A.ID WHERE A.ID IN (SELECT B.Father_ID FROM B WHERE B.ID=100)
其中B表的Father_ID是个外键,是对应A表的ID主键.
请问用Hibernate该如何写呢? 请教的是Hibernate该如何写,比如以下语句:
ICriteria criterA = NHibernateSession.CreateCriteria(typeof(A));
ICriteria criterB = NHibernateSession.CreateCriteria(typeof(B)); 具体该如何将criterA 和criterB 关连起来呢?
其中的对象该如何关连呢?
比如这个SQL语句:
select A.ID,A.Name FROM A WHERE A.ID WHERE A.ID IN (SELECT B.Father_ID FROM B WHERE B.ID=100)
其中B表的Father_ID是个外键,是对应A表的ID主键.
请问用Hibernate该如何写呢? 请教的是Hibernate该如何写,比如以下语句:
ICriteria criterA = NHibernateSession.CreateCriteria(typeof(A));
ICriteria criterB = NHibernateSession.CreateCriteria(typeof(B)); 具体该如何将criterA 和criterB 关连起来呢?
其中的对象该如何关连呢?
是基于对象持久化的
1对1 多对1关联
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.1 http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
--><class
name="hibernatesample.Tuser1"
table="t_user1"
>
<id
name="id"
type="java.lang.Integer"
column="id"
>
<generator class="native" />
</id> <property
name="name"
type="java.lang.String"
column="name"
not-null="true"
length="45"
>
</property>
<property
name="age"
type="java.lang.Integer"
column="age"
length="10"
>
</property> <!-- Associations -->
<!-- bi-directional one-to-one association to Tpassport -->
<one-to-one
name="passport"
class="hibernatesample.Tpassport"
outer-join="true"
cascade="all"
constrained="true"
>
</one-to-one>
<!-- bi-directional many-to-one association to Tgroup -->
<!--<many-to-one
name="group"
class="hibernatesample.Tgroup"
not-null="true"
unique="true"
>
<column name="group_id" />
</many-to-one>--></class>
</hibernate-mapping>
建立A类,B类,A类中有B类的一个集合,B类有A类型的一个属性。
hql语句:
select c from B join B.a c where B.id=100
然后在配置文件里把这个属性写成many-to-one
在自动生成表
就可以了
User对象:id name Group
多个用户对应一个组的关系 User -----> Group(1)Group.hbm.xml<hibernate-mapping>
<class name="com.bjsxt.hibernate.Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
(2)User.hbm.xml<hibernate-mapping>
<class name="com.bjsxt.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<!--
<many-to-one name="group" column="groupid" cascade="all"/>
-->
<many-to-one name="group" column="groupid"/>
</class>
</hibernate-mapping>
SQL语句一般就不用写两个表关联这么麻烦了。