九.Spring 实体管理器

来源:互联网 发布:la域名在里注册便宜 编辑:程序博客网 时间:2024/06/07 06:55

一.
实体管理器:实体与数据库间桥梁,可把实体持久化到数据库,也可把数据库记录打包为实体。
这里写图片描述
基础映射:
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; 
0 0
原创粉丝点击