簡體   English   中英

Jpa @OnetoOne關系

[英]Jpa @OnetoOne relationship

這是我的實體類作者

@Entity
@Column(name = "ID")
private Long id;

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

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

@Lob
@Column(name = "BIO")
private String bio;

@OneToOne

private AuthorDetail authorId;

getter和setter和零參數構造函數

這是我的另一個實體AuthorDetail,這里我已使用@OneToOne映射(可選= false,mappedBy =“ authorDetail”)

 @Column(name = "ID")
private Long id;

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

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

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

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

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

@Column(name = "START_DATE")
@Temporal(TemporalType.DATE)
private Date startDate;

@Lob
@Column(name = "NOTES")
private String notes;

@OneToOne(optional = false,mappedBy = "authorDetail")
private Author authorId;

吸氣和二傳手這是我的主要課程

`EntityTransaction entr=em.getTransaction();
        entr.begin();
        Author author=new Author();
        author.setFirst("MD");
        author.setLast("RAHMATH");
        author.setBio("A Software Developer");

        Set detailSet=new HashSet<AuthorDetail>();
        AuthorDetail detail=new AuthorDetail();
        detail.setAddress1("Address1");
        detail.setAddress2("Address2");
        detail.setCity("NoMansLand");
        detail.setState("ZZ");
        detail.setZip("12345");
        detail.setNotes("This is test detail");
        detailSet.add(detail);
        em.persist(author);
        entr.commit();`

如果嘗試運行該程序,我將獲得例外

如果需要單向關系,則無需在兩個類中都編寫@OneToOne。 從給定的代碼段中,您似乎想要作者詳細信息和作者之間的雙向關系。

為了讓另一端了解該關系(雙向),需要將mapledBy屬性添加到@OneToOne批注中。 此屬性引用作為關系所有者的實體中的(Java)屬性。 您需要在AuthorDetail類中添加;

@OneToOne(optional = false,mappedBy = "authorId") private Author authorId;

在mappedBy屬性中,您需要引用實體而不是類名。

在您的Author更改以下內容:

@OneToOne
private AuthorDetail authorId;

至:

@OneToOne
private AuthorDetail authorDetail;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM