hibernate多表查询,映射关系如何写

游侠KnighT 2009-09-17 03:08:36
假如我想执行这样一条语句:select u.name,r.role from userInfo u, roleInfo r
映射关系要怎样写呢?难道是再在Myeclipse Database Explorer ADD一遍吗?
望高手指点小弟一二!给出例子,不盛感激~
...全文
777 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen110xi 2010-01-20
  • 打赏
  • 举报
回复
这个.java的文件怎么写呢?
我刚刚接触java,是否可以传个简单的例子呢?
woming66 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wanglei74703130 的回复:]
引用 7 楼 woming66 的回复:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class table="_role" name="com.zzq.oa.model.Role">
    <id name="id">
      <generator class="native"/>
    </id>
    <property name="name" length="30" not-null="true" unique="true"/>
   
  </class>
</hibernate-mapping>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class table="_user" name="com.zzq.oa.model.User">
    <id name="id">
      <generator class="native"/>
    </id>
    <property name="username" length="30" not-null="true" unique="true"/>
    <property name="password" length="30" not-null="true"/>
  </class>
</hibernate-mapping>

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class table="usersroles" name="com.zzq.oa.model.UsersRoles">
    <id name="id">
      <generator class="native"/>
    </id>
   
    <many-to-one name="role"/>
    <many-to-one name="user"/>
   
  </class>
</hibernate-mapping>


我觉得这么写 多增加了一个 hbm.xml 文件 可以写成多对多的关系。
这样 实体类 User 和 role 的映射关系更加明显。
但 我也想请问一下高手,在开发中 哪种方式更好? 希望有详细的理由,谢谢!
[/Quote]

错! 如果直接写多对多关联映射,那么我现在有个需求就是在多对多关联的那张表中加入一个新的属性字段,请问你用hibernate该如何进行映射?
编程序要考虑程序的扩展性和灵活性,因为需求总会变,我们也不知道什么地方在变!我能做的就是让程序不要硬编码,要灵活!
liubey_zff 2009-09-18
  • 打赏
  • 举报
回复
热心的小强确实是热心的高手!学习了。
玉猪 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 woming66 的回复:]
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class table="_role" name="com.zzq.oa.model.Role">
    <id name="id">
      <generator class="native"/>
    </id>
    <property name="name" length="30" not-null="true" unique="true"/>
   
  </class>
</hibernate-mapping>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class table="_user" name="com.zzq.oa.model.User">
    <id name="id">
      <generator class="native"/>
    </id>
    <property name="username" length="30" not-null="true" unique="true"/>
    <property name="password" length="30" not-null="true"/>
  </class>
</hibernate-mapping>

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class table="usersroles" name="com.zzq.oa.model.UsersRoles">
    <id name="id">
      <generator class="native"/>
    </id>
   
    <many-to-one name="role"/>
    <many-to-one name="user"/>
   
  </class>
</hibernate-mapping>

[/Quote]
我觉得这么写 多增加了一个 hbm.xml 文件 可以写成多对多的关系。
这样 实体类 User 和 role 的映射关系更加明显。
但 我也想请问一下高手,在开发中 哪种方式更好? 希望有详细的理由,谢谢!
游侠KnighT 2009-09-18
  • 打赏
  • 举报
回复
学习了
yuyejiewu 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ydsxi1314 的回复:]
在同一个hbm.xml不可能写多个表吗?
[/Quote]
不可以的
xiaowei3856 2009-09-17
  • 打赏
  • 举报
回复
学习
游侠KnighT 2009-09-17
  • 打赏
  • 举报
回复
啊,意思说就得写三个hbm.xml文件,三个表还要生成三个bean(set()、get()方法)了是不?
woming66 2009-09-17
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class table="_role" name="com.zzq.oa.model.Role">
<id name="id">
<generator class="native"/>
</id>
<property name="name" length="30" not-null="true" unique="true"/>

</class>
</hibernate-mapping>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class table="_user" name="com.zzq.oa.model.User">
<id name="id">
<generator class="native"/>
</id>
<property name="username" length="30" not-null="true" unique="true"/>
<property name="password" length="30" not-null="true"/>
</class>
</hibernate-mapping>

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class table="usersroles" name="com.zzq.oa.model.UsersRoles">
<id name="id">
<generator class="native"/>
</id>

<many-to-one name="role"/>
<many-to-one name="user"/>

</class>
</hibernate-mapping>

给你自己看吧 这是我一个项目的例子
游侠KnighT 2009-09-17
  • 打赏
  • 举报
回复
在同一个hbm.xml不可能写多个表吗?
z_j188 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ydsxi1314 的回复:]
我要再加一个表,需要再添加一个hbm.xml等文件吗?
[/Quote]

要的
游侠KnighT 2009-09-17
  • 打赏
  • 举报
回复
我要再加一个表,需要再添加一个hbm.xml等文件吗?
woming66 2009-09-17
  • 打赏
  • 举报
回复
<composite-id name="id" class="user.UserinfoId">
<key-property name="id" type="java.lang.String">
<column name="ID" length="32" />
</key-property>
<key-property name="pwd" type="java.lang.String">
<column name="PWD" length="20" />
</key-property>
<key-property name="name" type="java.lang.String">
<column name="NAME" />
</key-property>
<key-property name="onLine" type="java.lang.String">
<column name="ON_LINE" length="10" />
</key-property>
<key-property name="purview" type="java.lang.String">
<column name="PURVIEW" length="10" />
</key-property>
<key-property name="islock" type="java.lang.String">
<column name="ISLOCK" length="10" />
</key-property>
</composite-id>

大哥 你的USERINFO没设主键,晕死! 初学者最好不要用反向工程 要自己写映射文件
游侠KnighT 2009-09-17
  • 打赏
  • 举报
回复
嗯,关系我是想问一下这个映射关系如何写
下面是一个没有主键的表的映射关系,我要再加一上一个表呢?如何加呢?
<hibernate-mapping>
<class name="user.Userinfo" table="USERINFO" schema="`FILE`">
<composite-id name="id" class="user.UserinfoId">
<key-property name="id" type="java.lang.String">
<column name="ID" length="32" />
</key-property>
<key-property name="pwd" type="java.lang.String">
<column name="PWD" length="20" />
</key-property>
<key-property name="name" type="java.lang.String">
<column name="NAME" />
</key-property>
<key-property name="onLine" type="java.lang.String">
<column name="ON_LINE" length="10" />
</key-property>
<key-property name="purview" type="java.lang.String">
<column name="PURVIEW" length="10" />
</key-property>
<key-property name="islock" type="java.lang.String">
<column name="ISLOCK" length="10" />
</key-property>
</composite-id>
</class>
</hibernate-mapping>
woming66 2009-09-17
  • 打赏
  • 举报
回复
select u.name,r.role from userInfo u, roleInfo r
userInfo 和 roleInfo 是多对多关系
一般都把多对多拆分成两个多对一
通过表连接来实现
如select u.userName, r.roleName from UserRole ur join ur.user u join ur.role r;

81,094

社区成员

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

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