一.
实体管理器:实体与数据库间桥梁,可把实体持久化到数据库,也可把数据库记录打包为实体。
基础映射:
dao层类 UserRepositoryImpl,spring配置文件通过其后缀知道它与接口UserRepository关系。在UserRepositoryImpl中注入一个
@PersistenceContext
private EntityManager entityManager;
@Transactional
public void add(User user) {
entityManager.persist(user);
}
add:entityManager.persist(user);
update:find(User.class, user.getId()),修改实体属性,返回实体
addOrUpdate:.merge(user)
delete:remove
高级映射:
一对一:Person对address,Person的address_id(外键)对应address的aid(主键)
@OneToOne(cascade={CascadeType.REFRESH,CascadeType.REMOVE},fetch=FetchType.LAZY)
一对多:
depart:did ,name
depart_employee:depart_id ,employ_id
employee:eid, name
@OneToMany
@JoinTable(name = "depart_employee",
joinColumns = @JoinColumn(name = "depart_id",referencedColumnName="did"),
inverseJoinColumns = @JoinColumn(name = "employee_id",referencedColumnName="eid"))
private List<Employee> employees;
另一种方法:
在多端加一列:depart_id
配置:
class Depart2:
@OneToMany
@JoinColumn(name="depart_id",referencedColumnName="id")
private List<Employee2> employee2s;
多对多:
student:sid,age,gender,height,name
teacher_student:teacher_id,student_id
teacher:tid,age,gender,height,name
class Teacher :
@ManyToMany
@JoinTable(name = "teacher_student",
joinColumns = @JoinColumn(name = "teacher_id",referencedColumnName="tid"),
inverseJoinColumns = @JoinColumn(name = "student_id",referencedColumnName="sid"))
private List<Student> students;
class Student:
@ManyToMany(mappedBy = "students")
private List<Teacher> teachers;
实体映射:单一表策略,连接表策略,每个类策略
类策略不浪费空间,效率高:
book,phone都继承了父类item,子类父类的主键不重复
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Item {
/* @Id
@GeneratedValue(strategy = GenerationType.AUTO) */
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "ItemGenerator")
@TableGenerator(name = "ItemGenerator",table="pk_generator",
pkColumnName="gen_name",
valueColumnName="gen_value",
pkColumnValue="item_pk",
initialValue=0,
allocationSize=1)
private Long id;