假设我在多对多中有三个表:user,group和user_in_group。多对多的结构是:
user_id BIGINT
group_id BIGINT
generate_table TINYINT
哪个应该导致:
public UserInGroup(UserInGroupId id = new UserInGroupId(user_id, group_id),
User user,
Group group,
boolean generateTable)
但相反,它会导致:
public UserInGroup(UserInGroupId id = new UserInGroupId(user_id, group_id),
Group group,
User user,
boolean generateTable)
我认为可能是组的外键是在用户的外键之前创建的,但是我交换了外键并没有区别。
这是我的UserInGroup.hbm.xml
:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Aug 1, 2014 10:06:06 AM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.my.project.UserInGroup" table="user_in_group" catalog="project">
<composite-id name="id" class="com.my.project.UserInGroupId">
<key-property name="UserId" type="long">
<column name="user_id" />
</key-property>
<key-property name="GroupId" type="long">
<column name="group_id" />
</key-property>
</composite-id>
<many-to-one name="Group" class="com.my.project.Group" update="false" insert="false" fetch="select">
<column name="group_id" not-null="true" />
</many-to-one>
<many-to-one name="User" class="com.my.project.User" update="false" insert="false" fetch="select">
<column name="user_id" not-null="true" />
</many-to-one>
<property name="generateTable" type="boolean">
<column name="generate_table" not-null="true" />
</property>
</class>
</hibernate-mapping>
答案 0 :(得分:0)
生成的构造函数中的属性顺序对应于XML Mapping中的属性顺序。
在复合键的映射中,userId是第一个,然后是groupId。因此,你得到new UserInGroupId(user_id, group_id)
。对于多对一参考,反之亦然 - 首先说明对集团的引用,然后是对用户的引用。
您只需更改XML并切换多对一引用的顺序:
<many-to-one name="User" class="com.my.project.User" update="false" insert="false" fetch="select">
<column name="user_id" not-null="true" />
</many-to-one>
<many-to-one name="Group" class="com.my.project.Group" update="false" insert="false" fetch="select">
<column name="group_id" not-null="true" />
</many-to-one>
由于XML是从反向生成生成的,因此反向生成器的数据库可能按照您在生成的XML中看到的顺序返回两个外键。如果您不想手动更改XML,则应检查是否可以修改源数据库以按所需顺序返回列。