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

具有单向OneToMany关系的Ebean在插入期间导致重复列异常

石苏燕
2023-03-14

我有一个具有唯一id UID的表条目。第二个表程序,ID列作为键,程序列表UID外键引用条目中的UID。我没有创建名称,这是我试图维护的遗留代码。

@Entity(name="entry")
public class Entry {
    @Id
    public int uid;
    
    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name="program_list_uid", referencedColumnName="uid")
    public List<Program> programList;

    ...
}

@Entity(name="program")
public class Program {
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    public int id;

    @Column(length=150,name="program_name")
    public String programName;

    @Column(name="program_list_uid")
    public Integer entryId = 0;
}

当试图保存条目Ebean.save(条目)时,我得到一个异常

ERROR执行DML bindLog[]错误[[SQL0121]重复的名称PROGRAM_LIST_UID不允许...

跟踪显示insert语句确实指定了两次program\u list\u uid

insert into program (program_list_uid, program_name, program_list_uid) 
values (?,?,?)

我找到的唯一方法是从Program中删除entryId。然而,此属性在代码的其他地方使用。

共有1个答案

汪翰墨
2023-03-14

解决方案是将insertable=false,updateable=false添加到entryId上的@Column注释中。如何从JPA manytone映射中检索外键而不命中目标表?

@Entity(name="program")
public class Program {
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    public int id;

    @Column(length=150,name="program_name")
    public String programName;

    @Column(name="program_list_uid", insertable = false, updatable = false)
    public Integer entryId = 0;
}
 类似资料:
  • 我有一出戏!使用ebean进行模型管理的框架项目。我有4个模型,A B C D. A和B是oneTo多,B和C是OneTo多,B和D是One To多。现在我想要一个与所有相关的B C D链接的A列表。 我现在拥有的是 但是性能非常差,根据sql日志,sql查询没有按照我的要求进行连接。是否有任何方法可以对所有这些对象使用查询联接?(即,选择包含4个查询的所有A B C D,并在本地连接它们,而不是

  • 我有一个实体,它与

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

  • 当我试图使用ebean缓存系统(带有io.ebean:ebean-redis)读取@ManyTomany关系时,我遇到了一个异常。这是一个springboot应用程序。 我正在使用的版本: SpringBootVersion=2.4.3 MariaDbVersion=2.7.2 EBeanVersion=12.7.2 Flywayversion=7.7.0 BaseModel Java类: 文章J

  • 我想在(您可以将其视为Student)实体和实体之间实现一个@ManyTomany单向的。很简单,一个教室可以有很多学生,而学生可以有很多教室。我希望它是单向的,因为我希望班级只知道它包含什么学生,学生不必知道他们有什么班级。这就是我目前所拥有的: ClassRoom.java Account.java 我通过以下代码保存它(使用Spring JPA): 但我得到了以下错误: 下面是StackTr

  • 问题内容: 假设我有两个实体: 然后,我要保留“客户”实体,然后,参照先前添加的“客户”保留“订单”实体。当我从数据库中检索此客户并调用getOrders时,它将返回空集。这是正常行为吗?如果是,当我添加新的Order实体时,我该怎么做以自动刷新此集合? 问题答案: Jpa不会为您维护关系,因此应用程序需要设置双向关系的两端,以使它们与数据库保持同步。当您设置了order-> customer关系