Jpa
Title | Summary |
---|---|
@OneToMany jpa |
簡易範例 @Entity @Table(name = "staf") public class Staf implements Serializable { private static final long serialVersionUID = 1L; /** 職員代碼(PK) */ @Id @GeneratedValue private int stafno; /** 職員編號 */ private String empid; /** 職員姓名 */ private String name; /** 職位 */ @OneToMany(mappedBy="stafno", fetch = FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval=true) private Set<Stafpositn> stafpositns; } 注意事項 建議使用fetch=FetchType.EAGER,如果使用LAZY據說要在@Transactional範圍內才不會沒有連線而報錯 cascade=CascadeType.ALL, orphanRemoval=true是為了從Set中移除物件並存檔時,可同步移除資料庫內容 建議使用Set取代List,如果使用@OneToMany List2個會報MultipleBagFetchException,參考這裡 |
Entity的繼承 jpa |
@Embeddable 如果只是要重複使用field,並且不介意多一層物件,可使用@Embeddable @Embeddable public class RC_OBJ implements Serializable { private static final long serialVersionUID = 1L; String rcuser; String rcdept; String rcdate; String rctime; String rcname; }@Entity @Table(name="BCCNTRL") public class BCCNTRL implements DeptDocument, ExecuteDocument { @Embedded @AttributeOverrides({ @AttributeOverride(name = "rcuser", column = @Column(name = "RCUSER")), @AttributeOverride(name = "rcdept", column = @Column(name = "RCDEPT")), @AttributeOverride(name = "rcdate", column = @Column(name = "RCDATE")), @AttributeOverride(name = "rctime", column = @Column(name = "RCTIME")), @AttributeOverride(name = "rcname", column = @Column(name = "RCNAME")), }) RC_OBJ rc; } @MappedSuperclass 如果只是要重複使用field,並且不介意Entity的extends被用掉,可使用@MappedSuperclass |