Hibernate 多对一 外键问题

yang1707 2012-09-05 10:38:12
hibernate单向多对一,可以不生成外键吗?
...全文
119 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wilburwei 2012-09-05
  • 打赏
  • 举报
回复
User表:uid,uname,did
Dept表:did,pname

pid外键
1.可以在User端配多对一

public class User{
private int uid;
private String uname;
private Dept dept;

..............

}

public class Dept {
private int did;
private String dname;

.. .....
}


<hibernate-mapping>
<class name=".......User" table="..user..">
<id name="uid" column="uid" type="int">
<generator class="assigned"/>
</id>

<property name="uname" column="uname" type="java.lang.String"/>

<many-to-one name="dept" class=".........Dept" column="pid" unique="true"/>

</class>
</hibernate-mapping>

<hibernate-mapping>
<class name=".......Dept" table="..dept..">
<id name="did" column="did" type="int">
<generator class="assigned"/>
</id>

<property name="pname" column="pname" type="java.lang.String"/>
</class>
</hibernate-mapping>





2.也可以在一端配置


public class User{
private int uid;
private String uname;

..............

}

public class Dept {
private int did;
private String dname;
private Set<User> users = new HashSet<User>();

.. .....
}


<hibernate-mapping>
<class name=".......User" table="..user..">
<id name="uid" column="uid" type="int">
<generator class="assigned"/>
</id>

<property name="name" column="name" type="java.lang.String"/>

</class>
</hibernate-mapping>

<hibernate-mapping>
<class name=".......Dept" table="dept">
<id name="did" column="did" type="int">
<generator class="assigned"/>
</id>

<property name="dname" column="dname" type="java.lang.String"/>

<set name="users" inverse="true" lazy="true" cascade="all">
<key>
<column name="did" not-null="true"/>
</key>
<one-to-many class="........User"/>
</set>
</class>
</hibernate-mapping>



3.双向就都配置们就好了。。。。
wilburwei 2012-09-05
  • 打赏
  • 举报
回复
User表:uid,uname,did
Dept表:did,pname

pid外键
1.可以在User端配多对一

public class User{
private int uid;
private String uname;
private Dept dept;

..............

}

public class Dept {
private int did;
private String dname;

.. .....
}


<hibernate-mapping>
<class name=".......User" table="..user..">
<id name="uid" column="uid" type="int">
<generator class="assigned"/>
</id>

<property name="uname" column="uname" type="java.lang.String"/>

<many-to-one name="dept" class=".........Dept" column="pid" unique="true"/>

</class>
</hibernate-mapping>

<hibernate-mapping>
<class name=".......Dept" table="..dept..">
<id name="did" column="did" type="int">
<generator class="assigned"/>
</id>

<property name="pname" column="pname" type="java.lang.String"/>
</class>
</hibernate-mapping>





2.也可以在一端配置


public class User{
private int uid;
private String uname;

..............

}

public class Dept {
private int did;
private String dname;
private Set<User> users = new HashSet<User>();

.. .....
}


<hibernate-mapping>
<class name=".......User" table="..user..">
<id name="uid" column="uid" type="int">
<generator class="assigned"/>
</id>

<property name="name" column="name" type="java.lang.String"/>

</class>
</hibernate-mapping>

<hibernate-mapping>
<class name=".......Dept" table="dept">
<id name="did" column="did" type="int">
<generator class="assigned"/>
</id>

<property name="dname" column="dname" type="java.lang.String"/>

<set name="users" inverse="true" lazy="true" cascade="all">
<key>
<column name="did" not-null="true"/>
</key>
<one-to-many class="........User"/>
</set>
</class>
</hibernate-mapping>



3.双向就都配置们就好了。。。。
yang1707 2012-09-05
  • 打赏
  • 举报
回复
关键不在单向多对一,而在反向生成表时,不生成外键
it491328322 2012-09-05
  • 打赏
  • 举报
回复
可以只配置单向的多对一的。。。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧