具有单向 OneToMany 关系的 Ebean 在插入期间导致重复列异常
Ebean with unidirectional OneToMany relationship causing duplicate column exception during insert
我有一个具有唯一 ID UID 的 table 条目。第二个 table PROGRAM,以 ID 列作为键,PROGRAM_LIST_UID 外键引用 ENTRY 中的 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(entry)
时出现异常
ERROR executing DML bindLog[] error[[SQL0121] Duplicate name PROGRAM_LIST_UID not allowed...
跟踪显示插入语句确实有两次指定的program_list_uid
:
insert into program (program_list_uid, program_name, program_list_uid)
values (?,?,?)
我发现使这项工作起作用的唯一方法是从 Program
中删除 entryId
。但是,此 属性 在代码的其他地方使用。
解决方案是将 insertable = false, updatable = false
添加到 entryId
上的 @Column
注释。 How can I retrieve the foreign key from a JPA ManyToOne mapping without hitting the target table?
@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;
}
我有一个具有唯一 ID UID 的 table 条目。第二个 table PROGRAM,以 ID 列作为键,PROGRAM_LIST_UID 外键引用 ENTRY 中的 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(entry)
时出现异常
ERROR executing DML bindLog[] error[[SQL0121] Duplicate name PROGRAM_LIST_UID not allowed...
跟踪显示插入语句确实有两次指定的program_list_uid
:
insert into program (program_list_uid, program_name, program_list_uid)
values (?,?,?)
我发现使这项工作起作用的唯一方法是从 Program
中删除 entryId
。但是,此 属性 在代码的其他地方使用。
解决方案是将 insertable = false, updatable = false
添加到 entryId
上的 @Column
注释。 How can I retrieve the foreign key from a JPA ManyToOne mapping without hitting the target table?
@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;
}