Java 如何阻止Hibernate切换构造函数参数?
假设我在多对多中有三个表:user、group和user\u in\u group。多对多的结构是:Java 如何阻止Hibernate切换构造函数参数?,java,hibernate,Java,Hibernate,假设我在多对多中有三个表:user、group和user\u in\u 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)
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>
生成的构造函数中属性的顺序与XML映射中属性的顺序相对应 在复合键的映射中,userId是第一个,然后是groupId。因此,您将获得新的UserInGroupId(user\u id,group\u 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,则应检查是否可以修改源数据库以按所需顺序返回列。那么显示的代码是由Hibernate生成的?那么映射的定义在哪里?你使用XML吗?你能展示你的映射吗?那是UserInGroup.hbm.xml吗?哦,我应该提到我每次生成代码时都在进行反向工程。我添加了反向工程生成的hbm xml。