/**
* 创建了一个实体类。
*
* 如何持久化呢?
*
* 1、使用@Entity进行实体类的持久化操作,当JPA检测到我们的实体类当中有
*
* @Entity 注解的时候,会在数据库中生成对应的表结构信息。
*
*
* 如何指定主键以及主键的生成策略?
*
* 2、使用@Id指定主键.
*
*
*/
@Entity
@Table(name="user")
public class User {
/**
* 使用@Id指定主键.
*
* 使用代码@GeneratedValue(strategy=GenerationType.AUTO)
* 指定主键的生成策略,mysql默认的是自增长。
*
*/
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;//主键.
private String name;//姓名
private int age;//年龄
private String remakes;//备注
@ManyToOne
@JoinColumn(name="role_id", nullable=false)
private Role role1;//角色
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;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getRemakes() {
return remakes;
}
public void setRemakes(String remakes) {
this.remakes = remakes;
}
}
@Entity
@Table(name="role")
public class Role {
@Id
private int id;
private String name;
private String desc;
/*
* 主表role 从表 user
* mappedBy属性应该指向从表中维护与主表关系的字段。
* 定义类之间的双向关系。如果类之间是单向关系,不需要提供定义,
* 如果类和类之间形成双向关系,我们就需要使用这个属性进行定义,
* 否则可能引起数据一致性的问题。该属性的值是“多”方class里的“一”方的变量名
* 对于Role类来说,mappedBy就应该指向User类中的role1属性。
* @mappedBy注解的作用:在JPA中,在@OneToMany里加入mappedBy属性可以避免生成一张中间表。
*/
/**
* 在‘一’的一方,将关系维护交给多的一方,就像一本书出版后,自己去定义自己的图书类型,
* 然后将自己归纳到相应图书类型下。
* 当级联操作时,比如某种图书类型被封杀下架了,图书馆可以选择销毁,更新。。这种图书类型下的图书,
* 也可以让这些书就放在那不管他了(书没了类型)
*/
@OneToMany(mappedBy="role1")
private Set<User> users = new HashSet<User>();
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;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
}