2个表,一个是User一个是Role
3个类,code如下:
@Entity
@Table(name="t_user")
public class User {
private int id;
private String username;
private String password;
/**
* 帐号失效时间
*/
private Date expireTime;
/**
* 帐号创建时间
*/
private Date createTime;
private Person person;
private Set<Role> roles = new HashSet<Role>();
@ManyToMany
@JoinTable(name="t_users_roles",
joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="role_id", referencedColumnName="id")})
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(unique=true, nullable=false)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(nullable=false)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getExpireTime() {
return expireTime;
}
public void setExpireTime(Date expireTime) {
this.expireTime = expireTime;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@OneToOne
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
----------------------------------------------------------------------------------------------------------
@Entity
@Table(name="t_role")
public class Role {
private int id;
private String name;
private Set<User> users = new HashSet<User>();
@ManyToMany(mappedBy="roles")
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
------------------------------------------------------------------------------------------------------------
@Entity
@Table(name="t_users_roles")
public class UsersRoles {
private int id;
private Role role;
private User user;
private int orderNo;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@ManyToOne
@JoinColumn(name="role_id")
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
@ManyToOne
@JoinColumn(name="user_id")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public int getOrderNo() {
return orderNo;
}
public void setOrderNo(int orderNo) {
this.orderNo = orderNo;
}
}
-------------------------------------------------------------------------------------------------
这样建出来的表呢,我无法向中间表里面插数据(中间表主键并不是我手动指定的ID,而成了user_id,role_id的联合主键)
hibernate中建立多对多关联,如果要建中间表那个类,是不是只能建立单向关联?-----------------------------------------------------------------------------------------------------
3个类,code如下:
@Entity
@Table(name="t_user")
public class User {
private int id;
private String username;
private String password;
/**
* 帐号失效时间
*/
private Date expireTime;
/**
* 帐号创建时间
*/
private Date createTime;
private Person person;
private Set<Role> roles = new HashSet<Role>();
@ManyToMany
@JoinTable(name="t_users_roles",
joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="role_id", referencedColumnName="id")})
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(unique=true, nullable=false)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(nullable=false)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getExpireTime() {
return expireTime;
}
public void setExpireTime(Date expireTime) {
this.expireTime = expireTime;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@OneToOne
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
----------------------------------------------------------------------------------------------------------
@Entity
@Table(name="t_role")
public class Role {
private int id;
private String name;
private Set<User> users = new HashSet<User>();
@ManyToMany(mappedBy="roles")
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
------------------------------------------------------------------------------------------------------------
@Entity
@Table(name="t_users_roles")
public class UsersRoles {
private int id;
private Role role;
private User user;
private int orderNo;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@ManyToOne
@JoinColumn(name="role_id")
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
@ManyToOne
@JoinColumn(name="user_id")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public int getOrderNo() {
return orderNo;
}
public void setOrderNo(int orderNo) {
this.orderNo = orderNo;
}
}
-------------------------------------------------------------------------------------------------
这样建出来的表呢,我无法向中间表里面插数据(中间表主键并不是我手动指定的ID,而成了user_id,role_id的联合主键)
hibernate中建立多对多关联,如果要建中间表那个类,是不是只能建立单向关联?-----------------------------------------------------------------------------------------------------
解决方案 »
- extjs 如何得到treePanel中的id
- annotation 主外键映射,有点复杂
- 黎活明 第八章程序 部署时出问题 请大家帮忙!
- eclipse+axis2 生成客户服务端错误
- 请教存储过程!
- 用dom解析xml时,xml文件中有一个标签的某个值为"&",解析就出错了,如何解决???
- JSP Template请教
- 走咯。51放假咯,大家开心咯,我散分咯。
- 怎样更改EJB的缺省目录?
- 我按cn-java上实战EJB做的第一个EJB例子(最简单的),最后运行http://localhost:6888/hello/servlet/HelloServlet,结果提示“Http:404
- 关于在Java中使用URLRewrite的问题
- 如何删除已经生成的Jar文件里面的某一个类
你的单向关联是什么意思?我不懂
关系的维护不一定是双向的 可以设置inverse=true