Hibernate对jpa annotation的支持

时间:2022-09-11 13:03:01
1、@Entity
@Table(name="t_user1")

public class User1 {}                    //如果是group则必须得重命名表,因为group是关键字


@Id
//采用数据库自增方式生成主键
//@GeneratedValue(strategy=GenerationType.AUTO)
@GeneratedValue
public int getId() {
return id;
}


@Column(name="create_time")
public Date getCreateTime() {
return createTime;
}




//年龄不持久化,则数据库里没有
@Transient
public int getAge() {
return age;
}




@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)//主键由数据库自动生成(主要是自动增长型) 
public int getId() {
return id;
}





@Id
@GeneratedValue(strategy=GenerationType.TABLE)                   //使用一个特定的数据库表格来保存主键。 
public int getId() {
return id;
}



//采用hibernate uuid生成器,此时id类型必须改成String类型,不能是int类型,而上面所有的是利用数据库自动分配,则id是int类型
@Id
@GenericGenerator(name="myIdGenerator",strategy="uuid")
@GeneratedValue(generator="myIdGenerator")
public String getId() {
return id;
}



@ManyToOne                                                    //此时manytoone是自动生成外键class_id,但使用joincolumn()就可以改变外键名称
@JoinColumn(name="classesid")
public Classes getClasses() {
return classes;
}

//mappedBy在哪一端,哪一端就不维护关系,它成为了关系的被管理端
//向当于hibernate中的inverse=true
//如果采用了泛型,可以不用采用targetEntity属性
@OneToMany(mappedBy="classes",targetEntity=Student.class)
@JoinColumn(name="classesid")
public Set getStudents() {
return students;
}



//因为集合使用泛型所以不再使用targetEntity来指定类型
@ManyToMany                      //要使用第三方表
@JoinTable(
name="t_user_role",
joinColumns={@JoinColumn(name="user_id")},
inverseJoinColumns={@JoinColumn(name="role_id")}  //对端的外键
)
public Set<Role> getRoles() {
return roles;
}

@ManyToMany(mappedBy="roles")         //让对端维护,让user端维护
public Set<User> getUsers() {
return users;
}





采用JPA映射每棵类继承树一张表
@Entity
@Table(name="t_animal")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)
public class Animal {}

@Entity
@DiscriminatorValue(value="B")
public class Bird extends Animal {

@Entity
@DiscriminatorValue(value="P")
public class Pig extends Animal {




采用JPA映射每个类一张表

@Entity
@Table(name="t_animal")
@Inheritance(strategy=InheritanceType.JOINED)
public class Animal {

@Entity
public class Pig extends Animal {

@Entity
public class Bird extends Animal {




采用JPA映射每个具体类一张表

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Animal {


private int id;

private String name;

private boolean sex;


@Id
public int getId() {
return id;
}

@Entity
public class Bird extends Animal {

@Entity
public class Pig extends Animal {