hibernate映射关系是一对一还是多对一??简单问题我问了三次了....

lylshr 2010-05-04 08:58:40
我的本意是想这句HQL语句"FROM RoleVO as a left join a.UserRoleVO as b where b.userID=?"让roleVO的roleID和userRoleVO的roleID相等的联合查询,

但是我发现程序却变成了FROM RoleVO as a left join a.UserRoleVO on RoleVO.roleID=UserRoleVO.userRoleID(UserRoleVO的主键) as b where b.userID=?"
我 想问如何配置才能让roleVO的roleID和userRoleVO的roleID相等的联合查询,我的映射关系到底是一对一还是多对一????麻烦大哥们说的详细点,谢谢了
role.hbm.xml
<hibernate-mapping>
<class name="com.shili2.vo.RoleVO" table="role" schema="dbo" catalog="shilikaifa">
<id name="roleID" type="java.lang.String">
<column name="roleID" length="50" />
<generator class="assigned" />
</id>
<property name="roleCode" type="java.lang.String">
<column name="roleCode" length="50" />
</property>
<property name="roleName" type="java.lang.String">
<column name="roleName" length="20" />
</property>
<many-to-one name="UserRoleVO" class="com.shili2.vo.UserRoleVO"
fetch="select" update="false" insert="false">
<column name="roleID" />
</many-to-one>
</class>
</hibernate-mapping>


userRole.hbm.xml

<hibernate-mapping>
<class name="com.shili2.vo.UserRoleVO" table="userRole" schema="dbo" catalog="shilikaifa">
<id name="userRoleID" type="java.lang.Integer">
<column name="userRoleID" />
<generator class="native"/>
</id>
<property name="userID" type="java.lang.String">
<column name="userID" length="50" />
</property>
<property name="roleID" type="java.lang.String" update="false" insert="false">
<column name="roleID" length="50" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="50" />
</property>
<set name="role" inverse="true">
<key>
<column name="roleID" />
</key>
<one-to-many class="com.shili2.vo.RoleVO" />
</set>
</class>
</hibernate-mapping>


roleVO
public class RoleVO {
private String roleID;
private String roleCode;
private String roleName;
private UserRoleVO userRoleVO;
public UserRoleVO getUserRoleVO() {
return userRoleVO;
}
public void setUserRoleVO(UserRoleVO userRoleVO) {
this.userRoleVO = userRoleVO;
}
public String getRoleID() {
return roleID;
}
public void setRoleID(String roleID) {
this.roleID = roleID;
}
public String getRoleCode() {
return roleCode;
}
public void setRoleCode(String roleCode) {
this.roleCode = roleCode;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}


}


userRoleVO
public class UserRoleVO {
private int userRoleID;
private String userID;
private String roleID;
private String password;
private Set role;
public String getRoleID() {
return roleID;
}
public void setRoleID(String roleID) {
this.roleID = roleID;
}
public int getUserRoleID() {
return userRoleID;
}
public void setUserRoleID(int userRoleID) {
this.userRoleID = userRoleID;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Set getRole() {
return role;
}
public void setRole(Set role) {
this.role = role;
}



}
...全文
336 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
lylshr 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 lxd520123 的回复:]
你照着写就是了,那里就是1,这个是常量exists的语法
查询结果为RoleVO,通过子查询对其数据过滤,
[/Quote]
好的谢谢,我在试试把````下午记得再帮我看看,可能还有问题的
muziyu1985 2010-05-04
  • 打赏
  • 举报
回复
做个记号 。。。。。
bunrise 2010-05-04
  • 打赏
  • 举报
回复
你照着写就是了,那里就是1,这个是常量exists的语法
查询结果为RoleVO,通过子查询对其数据过滤,
lylshr 2010-05-04
  • 打赏
  • 举报
回复
select 1 from UserRoleVO b where a.roleid = b.roleid and b.userid = ? 

晕``````不介意我问问你这个1应该是*把,你这菊花的意思是如果存在select * from UserRoleVO b where a.roleid = b.roleid and b.userid = ? 就查询出select * from RoleVO这个把
bunrise 2010-05-04
  • 打赏
  • 举报
回复
select * from RoleVO a where exists(select 1 from UserRoleVO b where a.roleid = b.roleid and b.userid = ? )
lylshr 2010-05-04
  • 打赏
  • 举报
回复
但是有个问题,如果配置多对对我的HQL语句是该怎么写关系,主要我是想让roleVO的roleID和userRoleVO的roleID相等这样的语句啊```配置成多对多就不能用"FROM RoleVO as a left join a.UserRoleVO as b where b.userID=?"这个联合查询了
lylshr 2010-05-04
  • 打赏
  • 举报
回复
没办法。我也没接触过HIBERNATE,比较烦这映射关系,好象真是多对多关系。。我再试试把
bunrise 2010-05-04
  • 打赏
  • 举报
回复

<set name="UserRoleVO">
<key column="roleID" />
<many-to-many class="UserRoleVO" column="roleID" />
</set>


我最烦配置多对多的。。。你自己看看吧,另外我从来不用join,对于fetch的配置你自己斟酌
lylshr 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 fyjava1984 的回复:]
楼主的配置是多对一关系,一般都不会用到联合查询。
联合查询都是在多对多关系中出现的,同时要提供两个条件 如 roleID=? and userID=?

根据楼主配置,HQL语句应该是这样的吧 "from RoleVO a where a.UserRoleVO.userID=?"
对象关系映射,还join什么呀
[/Quote]

不行,确实要联合查询才可以得到数据啊```而且我映射关系有错,帮忙看看如何配置让roleVO的roleID和userRoleVO的roleID相等把,我就问这个了
lylshr 2010-05-04
  • 打赏
  • 举报
回复
我只是想让roleVO的roleID和userRoleVO的roleID相等
我只是想让roleVO的roleID和userRoleVO的roleID相等
我只是想让roleVO的roleID和userRoleVO的roleID相等
我只是想让roleVO的roleID和userRoleVO的roleID相等
我只是想让roleVO的roleID和userRoleVO的roleID相等
我只是想让roleVO的roleID和userRoleVO的roleID相等
我只是想让roleVO的roleID和userRoleVO的roleID相等
我只是想让roleVO的roleID和userRoleVO的roleID相等
我只是想让roleVO的roleID和userRoleVO的roleID相等

"from RoleVO a where a.UserRoleVO.userID=?"我试试把,看看能让roleVO的roleID和userRoleVO的roleID相等
bunrise 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lylshr 的回复:]
引用 9 楼 lxd520123 的回复:
配置为多对多,把现在一的一方配置为<set>

到底是一对一,多对多,还是多对一啊???你们一个说一种关系,我无语了。。。。。。。
[/Quote]

这个应该是我们无语,你自己的东西自己却无法得知他是什么关系
数据结构的关系没搞清楚,对以后的程序编写,业务分析会存在隐患

我数 是多对多,你针对你的要求,也就是你要显示那条查询语句,具体多对多配置楼主自己看看
但是实际的也许不是这个样子
fyjava1984 2010-05-04
  • 打赏
  • 举报
回复
楼主的配置是多对一关系,一般都不会用到联合查询。
联合查询都是在多对多关系中出现的,同时要提供两个条件 如 roleID=? and userID=?

根据楼主配置,HQL语句应该是这样的吧 "from RoleVO a where a.UserRoleVO.userID=?"
对象关系映射,还join什么呀
lylshr 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 mawentao728 的回复:]
楼主可以在任何一段的id生成器中配置这个标签去引用对方表的的主键:
比如:在roleVO映射文件中加
<generator class="foreign">
<param name="property">userRoleVO</param>
</generator>
最后在加个约束标签
<one-to-one name="userRoleVO" constrained="true……
[/Quote]

这样不就变成userRoleVO的userRoleID和roleVO的roleID对应了??我只是想让roleVO的roleID和userRoleVO的roleID相等
lylshr 2010-05-04
  • 打赏
  • 举报
回复
关键是我这个HQL语句能运行的起来FROM RoleVO as a left join a.UserRoleVO as b where b.userID=?让roleVO的roleID和userRoleVO的roleID相等,高手能不能说详细点呢
Trinx 2010-05-04
  • 打赏
  • 举报
回复
楼主可以在任何一段的id生成器中配置这个标签去引用对方表的的主键:
比如:在roleVO映射文件中加
<generator class="foreign">
<param name="property">userRoleVO</param>
</generator>
最后在加个约束标签
<one-to-one name="userRoleVO" constrained="true" />

在userRoleVO的映射文件中只加这一句就行了
<one-to-one name="roleVO" cascade="all" />

最后再把UserRoleVO这个类的Set属性取了,换成RoleVO roleVO;并加上set\get方法就行了
lylshr 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lxd520123 的回复:]
配置为多对多,把现在一的一方配置为<set>
[/Quote]
到底是一对一,多对多,还是多对一啊???你们一个说一种关系,我无语了。。。。。。。
bunrise 2010-05-04
  • 打赏
  • 举报
回复
配置为多对多,把现在一的一方配置为<set>
lylshr 2010-05-04
  • 打赏
  • 举报
回复
one-to-one怎么配置呢,主要我那HQL的查询语句想问
如何配置才能让roleVO的roleID和userRoleVO的roleID相等主要这个我不知道怎么配置
Trinx 2010-05-04
  • 打赏
  • 举报
回复
一对一主键关联用的是<one-to-one>标签
Trinx 2010-05-04
  • 打赏
  • 举报
回复
那你不就越搞越麻烦了,你意思想配置一对一的主键关联
你自己看看你的javabean
加载更多回复(10)
HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - EventManager web应用程序 1.4.1. 编写基本的servlet 1.4.2. 处理与渲染 1.4.3. 部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC连接 3.4. 可选的配置属性 3.4.1. SQL方言 3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访器(accessors)和是否可变的标志(mutators)(可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. hibernate-mapping 5.1.3. class 5.1.4. id 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) 5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-subclass) 5.1.17. 联合子类(union-subclass) 5.1.18. 连接(join) 5.1.19. 键(key) 5.1.20. 字段和规则元素(column and formula elements) 5.1.21. 引用(import) 5.1.22. any 5.2. Hibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 自定义值类型 5

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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