问题描述:
现在有3个表 user和card,和关系表user_card,user_card表是通过user_id和card_id联合作主键的,且类UserCard中user和card是两个对象,分别对应user_id和card_id,我现在要
现在有3个表 user和card,和关系表user_card,user_card表是通过user_id和card_id联合作主键的,且类UserCard中user和card是两个对象,分别对应user_id和card_id,我现在要
通过card的编号来查询关系表记录
Criteria c = getSession().createCriteria(UserCard.class);
c.add(Restrictions.eq("type", type));
c.createAlias("card", "card");//如果不加入下面配置文件中注释下面的两个many-to-one,则hibernate无法自动left join card和user表进行查询
c.add(Restrictions.eq("card.no", number));
<hibernate-mapping>
<class name="com.entity.UserCard" table="user_card" lazy="false" >
<composite-id>
<key-many-to-one name="card" column="card_id" class="com.entity.CardInfo" />
<key-many-to-one name="user" column="user_id" class="com.entity.UserInfo" />
</composite-id>
<property name="type" column="type"></property>
<!--解决方法是加入以下两个配置,并且将insert,update属性设置为false -->
<many-to-one name="card" column="card_id" class="com.entity.CardInfo" insert="false" update="false"/>
<many-to-one name="user" column="user_id" class="com.entity.UserInfo" insert="false" update="false"/>
</class>
</hibernate-mapping>