1. 程式人生 > 其它 >Hibernate/JPA中@OneToOne和@MapsId的使用

Hibernate/JPA中@OneToOne和@MapsId的使用

技術標籤:javaMapsId的使用OneToOne和MapsId

Hibernate/JPA中@OneToOne和@MapsId的使用

雙向@OneToOne的效率低於與父表共享主鍵的單向@OneToOne。因此,不要使用雙向@OneToOne,最好是依靠單向@OneToOne和@MapsId。第一步:在子實體這邊使用@MapsId基本上,上面@OneToOne關聯,它將與父表共享主鍵,父實體見如下,父實體中沒有@OneToOne,這說明是從子實體指向父實體的單向關聯;

第一步:在子實體這邊使用@MapsId:

@Entity
public class Book implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @Column(name = "title", nullable = false)
    private String title;

    @Column(name = "description")
    private String description;

    @Column(name = "publication_date")
    private LocalDate publicationDate;

    @Column(name = "price", precision = 21, scale = 2)
    private BigDecimal price;

    @OneToOne(fetch = FetchType.LAZY)
    @MapsId
    private Author author;

基本上,上面@OneToOne關聯,它將與父表共享主鍵,父實體見如下,父實體中沒有@OneToOne,這說明是從子實體指向父實體的單向關聯:

@Entity
public class Author implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "birth_date")
    private LocalDate birthDate;