jpa的基本映射

    技术2022-05-19  20

       @Entity(name="person")   映射实体

       @Id     声明为主键

       @GeneratedValue      主键自增的生成方式,默认为根据方言生成,里面有个generator是指定上面序列生成器的名字,一般不指定

       @Temporal(TemporalType.DATE) 主要针对Date类型的字段可以指定相对应的日期类型

       一对一外键映射: @OneToOne(cascade=CascadeType.ALL)

    @JoinColumn(name="per_id",unique=true,nullable=false)

       一对一共享主键映射:

    @Id @GenericGenerator(name = "foreigner", strategy = "foreign",parameters={@Parameter(name="property",value="person")}) @GeneratedValue(generator="foreigner") public int getId() { return id; } public void setId(int id) { this.id = id; } @OneToOne(cascade=CascadeType.ALL) @PrimaryKeyJoinColumn public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } 

    因为JPA里面没有对共享主键做很好的实现,所以需要借助Hibernate里面的配置进行设置,

    先声明一个GenercGenerator主键生成器,定义为foreign,引用一个主的对象,然后在GeneratedValue里面指定

    刚声明的主键生成器,这样就OK了,虽然在数据库里面看不出表有什么区别,但在用jpa语法插入数据时就只能通过对象

    引用主键id来插入了,自己指定的是无效的

     

    一对多双向映射:@OneToMany    属性:mappedBy用于指定谁是关系维护端(多的一方为关系维护端,关系维护端负责外键记录的更新,关系被维护端没有权力更新外键),fetch:指定立即加载或者延迟加载,optional用于声明这个引用外键的值是可有(false)或可无(true)的

    @Entity(name="person") public class Person implements Serializable { private int id; private String name; private int age; private Date birthday; private IdCard idCard; @ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name="c_id") public IdCard getIdCard() { return idCard; } public void setIdCard(IdCard idCard) { this.idCard = idCard; } @OneToMany(cascade=CascadeType.ALL,mappedBy="idCard") public Set<Person> getPersons() { return persons; } public void setPersons(Set<Person> persons) { this.persons = persons; } //此方法用于向外键添加值 public void addPersons(Person person){ person.setIdCard(this); persons.add(person); System.out.println(persons.size()); } 

    多对多双向映射:@JoinTable是关联的表,inverseJoinColumns是被关联表引用的字段,joinColumns是关联表引用的字段

     

    @ManyToMany(cascade=CascadeType.ALL) @JoinTable(name="p_card" ,inverseJoinColumns={@JoinColumn(name="t_id")},joinColumns=@JoinColumn(name="p_id")) public Set<IdCard> getIdCards() { return idCards; } 


    最新回复(0)