比如我要定义一个用户实体,如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 key
private String loginname;// 登录名
private String nickname;// 昵称
private String password;// 密码MD5码
private String email;// email
private Date birthdate;// 生日
private String gender;// 性别
private String marriage;// 婚姻状况
private String msn;// msn
private String qq;// qq
private 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;// 上次登录IP
private String ip;// 本次登录IP
private 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这样的类能不能当成实体?即表达的不是独立的实体,而是表示实体与实体之间关系的,谢谢各位~
问题补充
帮你写了一个Annotation的实体类,映射关系劳烦你自己转换下,希望对你有用,呵呵
package com.bebig.shopping.model;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name = "tbl_QQUser")
public class QQUser {
private Long id;// primary key
private String loginname;// 登录名
private String nickname;// 昵称
private String password;// 密码MD5码
private String email;// email
private Date birthdate;// 生日
private String gender;// 性别
private String marriage;// 婚姻状况
private String msn;// msn
private String qq;// qq
private 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;// 上次登录IP
private String ip;// 本次登录IP
private Boolean disabled;// 是否可用
private String picture;// 头像路径
private Set<QQUser> friends = new HashSet<QQUser>();// 好友
private Set<QQUser> attentions= new HashSet<QQUser>();// 关注对象
private Set<QQUser> blcaklist= new HashSet<QQUser>();// 黑名单
public String getAddress() {
return address;
}
@ManyToMany(cascade={CascadeType.ALL})
@JoinTable(name = "tbl_QQUserAndAttentions", joinColumns = { @JoinColumn(name = "userId") }, inverseJoinColumns = { @JoinColumn(name = "attentionId") })
public Set<QQUser> getAttentions() {
return attentions;
}
public Date getBirthdate() {
return birthdate;
}
public String getBirthplace() {
return birthplace;
}
@ManyToMany(cascade={CascadeType.ALL})
@JoinTable(name = "tbl_QQUserAndBlcaklist", joinColumns = { @JoinColumn(name = "userId") }, inverseJoinColumns = { @JoinColumn(name = "blcaklistId") })
public Set<QQUser> getBlcaklist() {
return blcaklist;
}
public String getCountry() {
return country;
}
public Boolean getDisabled() {
return disabled;
}
public String getEmail() {
return email;
}
@ManyToMany(cascade={CascadeType.ALL})
@JoinTable(name = "tbl_QQUserAndFriends", joinColumns = { @JoinColumn(name = "userId") }, inverseJoinColumns = { @JoinColumn(name = "friendId") })
public Set<QQUser> getFriends() {
return friends;
}
public String getGender() {
return gender;
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public String getIp() {
return ip;
}
public String getLastIp() {
return lastIp;
}
public Date getLastLoginTime() {
return lastLoginTime;
}
public Date getLastLogoutTime() {
return lastLogoutTime;
}
public Integer getLoginCount() {
return loginCount;
}
public String getLoginname() {
return loginname;
}
public Date getLoginTime() {
return loginTime;
}
public String getMarriage() {
return marriage;
}
public String getMsn() {
return msn;
}
public String getNickname() {
return nickname;
}
public String getPassword() {
return password;
}
public String getPersonalSign() {
return personalSign;
}
public String getPhone() {
return phone;
}
public String getPicture() {
return picture;
}
public String getQq() {
return qq;
}
public String getRealname() {
return realname;
}
public Date getRegisterTime() {
return registerTime;
}
public String getSchoolname() {
return schoolname;
}
public String getStrongSuit() {
return strongSuit;
}
public void setAddress(String address) {
this.address = address;
}
public void setAttentions(Set<QQUser> attentions) {
this.attentions = attentions;
}
public void setBirthdate(Date birthdate) {
this.birthdate = birthdate;
}
public void setBirthplace(String birthplace) {
this.birthplace = birthplace;
}
public void setBlcaklist(Set<QQUser> blcaklist) {
this.blcaklist = blcaklist;
}
public void setCountry(String country) {
this.country = country;
}
public void setDisabled(Boolean disabled) {
this.disabled = disabled;
}
public void setEmail(String email) {
this.email = email;
}
public void setFriends(Set<QQUser> friends) {
this.friends = friends;
}
public void setGender(String gender) {
this.gender = gender;
}
public void setId(Long id) {
this.id = id;
}
public void setIp(String ip) {
this.ip = ip;
}
public void setLastIp(String lastIp) {
this.lastIp = lastIp;
}
public void setLastLoginTime(Date lastLoginTime) {
this.lastLoginTime = lastLoginTime;
}
public void setLastLogoutTime(Date lastLogoutTime) {
this.lastLogoutTime = lastLogoutTime;
}
public void setLoginCount(Integer loginCount) {
this.loginCount = loginCount;
}
public void setLoginname(String loginname) {
this.loginname = loginname;
}
public void setLoginTime(Date loginTime) {
this.loginTime = loginTime;
}
public void setMarriage(String marriage) {
this.marriage = marriage;
}
public void setMsn(String msn) {
this.msn = msn;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public void setPassword(String password) {
this.password = password;
}
public void setPersonalSign(String personalSign) {
this.personalSign = personalSign;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setPicture(String picture) {
this.picture = picture;
}
public void setQq(String qq) {
this.qq = qq;
}
public void setRealname(String realname) {
this.realname = realname;
}
public void setRegisterTime(Date registerTime) {
this.registerTime = registerTime;
}
public void setSchoolname(String schoolname) {
this.schoolname = schoolname;
}
public void setStrongSuit(String strongSuit) {
this.strongSuit = strongSuit;
}
}
哥们儿,非常感谢你的回复。不过我对Annotation理解不深呀,只有继续坐等了。。
在此感谢~~