JPA級聯(一對一 一對多 多對多)注解【實際項目中摘取的】並非自己實際應用


下面把項目中的用戶類中有個:一對一  一對多  多對多的注解對應關系列取出來用於學習      說明:項目運行正常

問題類:一對多、一對一、多對多
============一對多
一方的設置
    @OneToMany(mappedBy="ask",cascade={CascadeType.REMOVE})
    @LazyCollection(LazyCollectionOption.FALSE)
    @OrderBy(value="id desc")
    public Set<ScAskAnswer> getAnswers() {
        return answers;
    }
多方的設置
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="ASK_ID")
    public ScAsk getAsk() {
        return ask;
    }
===========一對一
一方
    @OneToOne(cascade={CascadeType.REMOVE,CascadeType.PERSIST,CascadeType.MERGE})
    @JoinColumn(name="TEXT_ID")
    public ScText getText() {
        return text;
    }
另一方沒有單獨的設置
=============

仿照案例分析二
USER類——下面每一組的上半部分代碼都是user用戶類的
====================第一組
一方
    @OneToMany(fetch=FetchType.LAZY,cascade = { CascadeType.REMOVE }, mappedBy="cmsUser")
    public List<CmsMsgInfo> getCmsInfos() {
        return cmsInfos;
    }
多方
    @ManyToOne
    @JoinColumn( name = "userId" )
    private User cmsUser;

說明:網上搜索資料:如果是EAGER,那么表示取出這條數據時,它關聯的數據也同時取出放入內存中 ;如果是LAZY,那么取出這條數據時,它關聯的數據並不取出來。
在jpa中jpa默認的加載方式是lazy方式也就是在實際使用到數據的時候才加 載相關數據,使用lazy時可以不用顯示注明fetch=FetchType.LAZY
====================第二組 一方 @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "user") @JsonIgnore @OrderBy("roleIndex") public List<UserRole> getUserRoles() { return userRoles; } 多方 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "f_user_id", nullable = false) public User getUser() { return this.user; } ====================第三組 一方 @OneToOne(fetch = FetchType.LAZY, cascade = { CascadeType.ALL },mappedBy="user") public CmsUserCompany getCmsUserCompany() { return cmsUserCompany; } 一方 @MapsId @OneToOne @JoinColumn(name="userid") public User getUser() { return user; } ====================第四組 @ManyToMany @JoinTable( name="cms_domain_user" , joinColumns={ @JoinColumn(name="userid") } , inverseJoinColumns={ @JoinColumn(name="id") } ) public List<CmsDomain> getCmsDomains() { return cmsDomains; } @ManyToMany(mappedBy="cmsDomains") @JsonIgnore private List<User> cmsUsers; ====================第五組 @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "user") @JsonIgnore @OrderBy("groupIndex") public List<UserMemberGroup> getUserGroups() { return userGroups; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "f_user_id", nullable = false) public User getUser() { return user; } ====================第六組 @ManyToMany(fetch = FetchType.LAZY) @JoinTable( name="cms_user_project_relation" , joinColumns={ @JoinColumn(name="userid") } , inverseJoinColumns={ @JoinColumn(name="projectid") } ) public List<CmsProject> getCmsProjects() { return cmsProjects; } @ManyToMany( mappedBy = "cmsProjects" ) public List<User> getUser() { return user; } ====================第七組 @OneToMany(mappedBy="user",cascade = CascadeType.ALL,orphanRemoval = true) @JsonIgnore public List<CmsUserProjectRelation> getCmsUserProjectRelations() { return cmsUserProjectRelations; } @ManyToOne @JoinColumn(name="userid",insertable = false, updatable = false) private User user; 網上資料: 當使用JPA配置實體時,如果有兩個屬性(一個是一般屬性,一個是多對一的屬性)映射到數據庫的同一列,就會報錯。 這時,在多對一的@JoinColumn注解中添加insertable = false, updatable = false就能解決。 1. /** 2. * 用戶類 3. */ 4. @Entity 5. @Table(name = "TBL_SYS_USER") 6. public class SysUser{ 7. @Id 8. @GeneratedValue(generator = "system-uuid") 9. @GenericGenerator(name = "system-uuid", strategy = "uuid") 10. @Column(name = "USER_ID", unique = true, length = 40) 11. @CsvColumn(imported=false) 12. private String id; //用戶ID 13. 14. @Column(name = "USER_CODE", nullable = false, length = 40) 15. private String userCode; //用戶賬號 16. 17. @CsvColumn(desc="用戶姓名", required= true ) 18. @Column(name = "USER_NAME", length = 60) 19. private String userName; //用戶姓名 20. 21. @Column(name = "DEPT_ID", length = 40) 22. private String deptId; //部門ID(IS_ORG=0的) 23. 24. @ManyToOne 25. @JoinColumn(name = "DEPT_ID", insertable = false, updatable = false, nullable=true) 26. private SysOrg dept; //部門對象 27. 28. } 我們可以看到,deptId和dept都映射到數據庫里面的DEPT_ID字段,但是加上了insertable = false, updatable = false后,在保存數據時,dept不會被保存到數據庫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM