hibernate自关联问题

问题描述

比如我要定义一个用户实体,如User。在这个用户实体里面,我想要定义用户的好友、黑名单和关注对象。于是我用了Set<User>的方式,然后在配置文件中使用了<Set>的配置,Set内使用many-to-many方式。我的目的就是让User自关联对多对,生成一个中间表,如User_friends。这样一来在运行的时候没问题,能生成所有预想的表,且能插入数据到User_INFO(User对应的表)中,但无论如何都不能将数据写入到对多对的关联表中。请高手们赐教,感谢不尽。 package org.fantasizer.blog.core.entity;import java.io.Serializable;import java.util.Date;import java.util.Set;/** * [CN]用户实体 * * @author Marco Jee * @date 2010-11-1 */@SuppressWarnings("serial")public class User implements Serializable {// ----------------------Instance Variables---------------------------//private Long id;// primary keyprivate String loginname;// 登录名private String nickname;// 昵称private String password;// 密码MD5码private String email;// emailprivate Date birthdate;// 生日private String gender;// 性别private String marriage;// 婚姻状况private String msn;// msnprivate String qq;// qqprivate String phone;// 电话号码private String realname;// 真实姓名private String country;// 国家private String address;// 地址private String birthplace;// 出生地private String schoolname;private String strongSuit;// 特长private String personalSign;// 个性签名private Date lastLoginTime;// 上次登录时间private Date lastLogoutTime;// 上次注销时间private Date registerTime;// 注册时间private Date loginTime;// 本次登录时间private Integer loginCount;// 登录次数private String lastIp;// 上次登录IPprivate String ip;// 本次登录IPprivate Boolean disabled;// 是否可用private String picture;// 头像路径private Set<User> friends;// 好友private Set<User> attentions;// 关注对象private Set<User> blcaklist;// 黑名单// ----------------------Getters and Setters---------------------------////Getters和Setters以及equals与hashCode方法由于太长,在此省略}<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="org.fantasizer.blog.core.entity"><class name="User" table="user_info" lazy="false"><id name="id" column="userid"><generator class="native" /></id><property name="loginname" column="loginname" type="string"length="20" unique="true" not-null="true" /><property name="nickname" column="nickname" type="string"length="20" not-null="true" /><property name="password" column="password" type="string"length="50" not-null="true" /><property name="email" column="email" type="string" length="50"not-null="true" unique="true" /><property name="birthdate" column="birthdate" type="date" /><property name="gender" column="gender" type="string" length="6" /><property name="marriage" column="marriage" type="string"length="6" /><property name="msn" column="msn" type="string" length="50" /><property name="qq" column="qq" type="string" length="50" /><property name="phone" column="phone" type="string" length="15" /><property name="realname" column="realname" type="string"length="50" /><property name="country" column="country" type="string"length="50" /><property name="address" column="address" type="string"length="100" /><property name="birthplace" column="birthplace" type="string"length="100" /><property name="schoolname" column="schoolname" type="string"length="50" /><property name="strongSuit" column="strongSuit" type="string"length="200" /><property name="personalSign" column="personalSign" type="string"length="200" /><property name="lastLoginTime" column="lastLoginTime" type="timestamp" /><property name="lastLogoutTime" column="lastLogoutTime" type="timestamp" /><property name="registerTime" column="registerTime" type="timestamp" /><property name="loginTime" column="loginTime" type="timestamp" /><property name="loginCount" column="loginCount" type="java.lang.Integer" /><property name="lastIp" column="lastIp" type="string" length="15" /><property name="ip" column="ip" type="string" length="15" /><property name="disabled" column="disabled" type="boolean" /><property name="picture" column="picture" type="string"length="100" /><set name="friends" inverse="true" table="user_friends" lazy="false"><key column="userid" /><many-to-many class="User" column="friendid" /></set><set name="attentions" inverse="true" table="User_attentions"><key column="userid" /><many-to-many class="User" column="attentionid" /></set><set name="blcaklist" inverse="true" table="user_blacklist"><key column="userid" /><many-to-many class="User" column="blcaklistid" /></set></class></hibernate-mapping>另外补充一下,使用Hibernate的时候,想UserRelationship这样的类能不能当成实体?即表达的不是独立的实体,而是表示实体与实体之间关系的,谢谢各位~ 问题补充txc_tang 写道

解决方案

帮你写了一个Annotation的实体类,映射关系劳烦你自己转换下,希望对你有用,呵呵
解决方案二:
再次帮你看了下,你的好像也没写错,会生成三个关系表。如果你只想生成一个表,那表结构就有点不太合理,呵呵。

时间: 2024-10-26 02:37:40

hibernate自关联问题的相关文章

关于hibernate g关联问题

问题描述 关于hibernate g关联问题 我有 一张 用户表user (user_Id user_nameuser_type) 还有张客户表customer(customer_iduesr_idcustomer_name)其中 user表的user_id是主键自增长,customer表里面customer_id是主键自增长,user_id是外键关联user表的user_id.user_type值为1的时候登陆会进入客户界面也就是customer表 我登陆的时候 输入用户名密码 session

Hibernate三重关联+多值问题。

问题描述 有这样三个类:Resource(资源),Attribute(属性),Spec(词条).他们的关系是一个资源的一个属性是一个或多个词条的集合.Resource有个属性是privateMap<Attribute,Set<Spec>>specs=newHashMap<Attribute,Set<Spec>>();数据表有resouce表,attribute表,和spec表还有一个关联表用resouce_id,attribute_id,spec_id做联合

hibernate映射关联?

问题描述 在hibernate映射文件中有段这样的一对多的映射<setname="question"><keycolumn="userId"/><one-to-manyclass="com.pwp.models.Question"></set><setname="topic"><keycolumn=userId"/><one-to-many

hibernate的关联与单独Sql的效率问题

问题描述 我想请教下各位前辈: 在用hibernate的一对多,多对一时,与单独写sql语句进行对表的操作,那种效率更高,当然我们假象sql是很优化的语句甚至是调用存储过程,那一种更好,为什么?拜赐教 解决方案 个人相信 SQL 效率更高!原因:Hibernate HQL 用起来是很爽!但是是基于sql的 !sql才是真理!(现在还有NOsql 等没关系的数据库也有很多人使用了)hibernate 他封装,包装了SQL 使程序员使用起来更好理解更好使用了!同时也会带来其他问题!面向对象了嘛!存储

hibernate 的关联查询hql怎么写

问题描述 比如我两个表 Person 和 IDCard 是一对一的关系.我想写一条hql,查询在IDCard存在Person对象的记录.该怎么写?from Person p where p.iDCard <> null 这个行不通 解决方案 from Person p where p.iDCard is not null

Hibernate(JPA)多对多(ManyToMany)关联映射不完美之处

近来,在做的一个NewsMS项目中,需要用到多对多关联映射,以下是项目中用到的两个实体类:用户类User和角色类Role,它们之间是多对多的关系. //用户表 @Entity @Table(name="rong_user") public class User{ //省略其它内容 private Set<Role> roles = new LinkedHashSet<Role>(); //角色集合 @ManyToMany(cascade = {CascadeTy

Hibernate 如何实现查询表与字典表关联

问题描述 员工信息表(Employee)中存的"机构","部门""职位"字段是存的代码.另外三张字典表存的是代码对应的名字.请问用Hibernate 如何关联这三张字典表,查询出机构,部门,职位对应的名字?并且不用再新建一个类,查询出来的值,直接赋到员工信息表对象中.Employee表结构:id,name,institution,department,position字典表:institution_dict表结构:id,namedepartmen

mysql-关于Hibernate 关联同一个表的两个字段的配置

问题描述 关于Hibernate 关联同一个表的两个字段的配置 譬如我要A B多对多关联,然后我就加多一个表C作为中间表. 在C中,有两个外键需要关联表A.那么C的hbm.xml需要怎么配置这两个外键呢?? 解决方案 hibernate表关联的各种配置: 解决方案二: 可以,有三种 关系 manytoone onetomany manytomany,但是不建议用 manytomany

Java的Hibernate框架中一对多的单向和双向关联映射_java

一.一对多单向关联映射 一对多关系的对象模型在日常生活中也经常看到,就拿学生和班级来说,一个班级里有多个学生,所以班级和学生的关系是一对多的关系,映射到对象模型中,如下图: 对象模型说明了这种一对多的关系是由一的一端来维护的,那么映射成关系模型就是一个班级字段下面会有多个学生,这样就形成了一对多的关系,通过班级能够查询获得学生信息,对应的关系模型如下图: 1.基本配置 有了对象模型接下来就让它们映射为对应的关系代码,在进行关系映射时需要在一的一端添加<one-to-many>标签,另外还需要在