當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring Data JPA_多表关联查询中应该注意的问题
生活随笔
收集整理的這篇文章主要介紹了
Spring Data JPA_多表关联查询中应该注意的问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
今天在寫Spring Data JPA的時候發(fā)現(xiàn)這樣一個問題
問題如下:
Caused by: org.hibernate.DuplicateMappingException: Table [sys_user_role] contains physical column name [user_role_id] referred to by multiple logical column names: [user_role_id], [userRoleId]Sys_User 實體類代碼
@Entity //實體與表名對應 @Table(name = "sys_user") public class Sys_User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)//generator = "identity"遞增的意思@Column(name = "user_id")private String userId;//用戶編號(人員編號(實驗室助理)等)private String userName;//用戶名private String password;//密碼private String major;//專業(yè)private String institute;//學院private String classes;//班級private String grade;//年級private String telephone;//手機號private String email;//郵箱private String imageId;//個人照片private String labId;//所屬實驗室/*配置一對多的關系-----Sys_User_Rolecascade設置級聯(lián)屬性,同步添加,同步刪除*/@OneToMany(targetEntity = Sys_User_Role.class,cascade = CascadeType.ALL,fetch = FetchType.EAGER)@JoinColumn(name = "user_role_id",referencedColumnName = "user_id")//name代表外鍵的名稱,referencedColumnName代表的是主表即當前表的主鍵名稱private Set<Sys_User_Role> sys_user_roles = new HashSet<Sys_User_Role>();public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}public String getInstitute() {return institute;}public void setInstitute(String institute) {this.institute = institute;}public String getClasses() {return classes;}public void setClasses(String classes) {this.classes = classes;}public String getGrade() {return grade;}public void setGrade(String grade) {this.grade = grade;}public String getTelephone() {return telephone;}public void setTelephone(String telephone) {this.telephone = telephone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getImageId() {return imageId;}public void setImageId(String imageId) {this.imageId = imageId;}public String getLabId() {return labId;}public void setLabId(String labId) {this.labId = labId;}public Set<Sys_User_Role> getSys_user_roles() {return sys_user_roles;}public void setSys_user_roles(Set<Sys_User_Role> sys_user_roles) {this.sys_user_roles = sys_user_roles;} }Sys_User_Role 實體類代碼
@Entity @Table(name = "sys_user_role") public class Sys_User_Role {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer id;//主鍵idprivate Integer userRoleId;//外鍵private Integer roleId;//用戶類型(1:實驗技術員,2:實驗室助理,:學工處人員;4系統(tǒng)用戶(學生))//配置多對一關系--Sys_user@ManyToOne(targetEntity = Sys_User.class,fetch = FetchType.LAZY)@JoinColumn(name = "user_role_id",referencedColumnName = "user_id",insertable = false,updatable = false)private Sys_User sys_user;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getRoleId() {return roleId;}public void setRoleId(Integer roleId) {this.roleId = roleId;}public Sys_User getSys_user() {return sys_user;}public void setSys_user(Sys_User sys_user) {this.sys_user = sys_user;}public Integer getUserRoleId() {return userRoleId;}public void setUserRoleId(Integer userRoleId) {this.userRoleId = userRoleId;} }這個問題困擾了我一天,當我設置一對多,多對一雙向關聯(lián)關系的時候,發(fā)現(xiàn)總是報錯,報錯信息跟外鍵有關,調試了之后還會報一些字段重復的錯誤。在網上找了一些例子看了之后,發(fā)現(xiàn)別人寫的代碼,輔表實體類都不會把外鍵寫出來,我這里外鍵的名字是user_role_id,只要把Sys_User_Role 里面的外鍵刪除即可,正確的實體類代碼如下:
@Entity @Table(name = "sys_user_role") public class Sys_User_Role {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer id;//主鍵idprivate Integer roleId;//用戶類型(1:實驗技術員,2:實驗室助理,:學工處人員;4系統(tǒng)用戶(學生))//配置多對一關系--Sys_user@ManyToOne(targetEntity = Sys_User.class,fetch = FetchType.LAZY)@JoinColumn(name = "user_role_id",referencedColumnName = "user_id",insertable = false,updatable = false)private Sys_User sys_user;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getRoleId() {return roleId;}public void setRoleId(Integer roleId) {this.roleId = roleId;}public Sys_User getSys_user() {return sys_user;}public void setSys_user(Sys_User sys_user) {this.sys_user = sys_user;} }總結
以上是生活随笔為你收集整理的Spring Data JPA_多表关联查询中应该注意的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Springboot+JPA 对应关系查
- 下一篇: 怎么样使用git克隆网站上的代码到本地文