当前位置: 首页 > 知识库问答 >
问题:

如何解决@OneTomany关系中的重复列名异常

卫志泽
2023-03-14

我试图@JoinColumn两个实体,分别命名为Customer和Account。一个客户可以有多个帐户,所以我认为在customer实体中使用@onetomany是正确的。和帐户实体中的@manytoone。但是,它总是在控制台中给我重复的列名。可以通过更改变量名来解决这个问题,但我不能简单地更改它,因为hibernate在DB中找不到列名。即使添加@column name属性也行不通。

有什么办法可以解决这个问题吗?

    null

我已经尝试了数据库中的SQL查询。查询是工作,但我不知道如何在hibernate JPA中映射它。

Oracle查询

SELECT a.USR_ID, a.USR_MGNT_NO, a.CUST_NO, a.ACCT_STATUS,
        b.ACCT_SEQ, b.ACCT_NO, b.CUST_NO, b.CUST_NM, b.SBJ_CD, b.ACCT_PRD_NM
FROM LB_USR_BASE a LEFT OUTER JOIN
 LB_ACCT_BASE b ON
a.CUST_NO=b.CUST_NO
WHERE a.USR_MGNT_NO=:usrMgtNo;

客户实体

@Entity
@Table(name = "CUSTOMER")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor

public class Customer implements Serializable{


    private static final long serialVersionUID = 1L;

    @Id
    private String custNo;

    private String usrId;
    private String usrMgntNo;
    private String acctStatus;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
    @JoinColumn(name = "custNo")
    private Set<Account> accounts = new HashSet<Account>();


}

账户实体

@Entity
@Table(name = "ACCOUNT")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Account {
    @Id
    private String acctId;
    private String acctNo;

    @ManyToOne
    private UsrBase user;
    private String sbjCd;
    private String custNo;

}
public interface CustAcctRepository extends JpaRepository<Customer, String>{

    List<Customer> findAcctByUsrMgntNo(String usrMgntNo);

}
List<Customer> tes = CustAcctRepo.findAcctByUsrMgntNo("12345"));
Caused by: org.hibernate.DuplicateMappingException: Table [ACCOUNT] contains physical column name [cust_no] referred to by multiple physical column names: [cust_no], [custNo]
public class Account {
    @Id
    private String acctSeq;
    private String acctNo;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "custNo",insertable = false, updatable = false)
    private UsrBase user;

}

public class Customer implements Serializable{


    private static final long serialVersionUID = 1L;

    @Id
    private String custNo;

    private String usrId;
    private String usrMgntNo;
    private String acctStatus;

    @OneToMany(cascade = CascadeType.ALL)
    private Set<AcctBase> accounts = new HashSet<AcctBase>();


}

共有1个答案

袁俊弼
2023-03-14

请看,在下面的代码中,您使用两个字段创建映射:'user'和'cust no'。使用user映射或使用account.custno映射

@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
@JoinColumn(name = "custNo")
private Set<Account> accounts = new HashSet<Account>();
 类似资料:
  • 我有一个具有唯一id UID的表条目。第二个表程序,ID列作为键,程序列表UID外键引用条目中的UID。我没有创建名称,这是我试图维护的遗留代码。 当试图保存条目时,我得到一个异常 ERROR执行DML bindLog[]错误[[SQL0121]重复的名称PROGRAM_LIST_UID不允许... 跟踪显示insert语句确实指定了两次: 我找到的唯一方法是从中删除。然而,此属性在代码的其他地方

  • 尝试获取ResultSet时出现以下错误: 我有一个表名,但错误指示的是小写表名。我一直试图调试它,但我无法找出根本原因。下面是我的代码片段。请看一下。 堆栈跟踪: org.postgresql.util.psqlexception:错误:关系“user_login”不存在位置:22

  • 问题内容: 我有一个代表网站的Class和一个Class 。A 可以有多个。 我想允许所有站点上都存在相同的用户名,但每个站点上都只有一个。 我怎样才能做到这一点? 问题答案: 让用户拥有一个站点参考: 现在将约束添加到用户: 您还必须更改站点映射:

  • 问题内容: 我正在使用JPA 2 + Hibernate 4.2.6进行Java项目,并且出现了奇怪的现象。 在我的模型中,我有两个相关实体:和 这非常有效:与某个特定对象相关的所有都已正确加载。 但是现在我需要将collecton 的tipe 从更改为。我更改了类型并再次运行了该应用程序,现在在…中出现了多个重复项,为什么可能呢?我知道允许重复,但是我的数据库中没有重复的记录,那么为什么要得到这

  • 我有一个实体,它与