我有两个表,通过连接表有很多关系。实体L是“主要”实体 问题是当manytomany值的集合中有新实体时,EclipseLink不会在连接表中设置主键。 当我加载L的实体时,集合中充满了K的实体。当我删除集合中的一个实体并保存L链接行时 EclipseLink删除L_K_L。但是当我向集合中添加K的实体并保存实体L时,我得到了异常,并且其中显示了:
INSERT INTO L_K_L (FKEY_K, FKEY_L) VALUES (?, ?)
bind => [2 parameters bound]
Query: DataModifyQuery(name="kategorien" sql="INSERT INTO L_K_L (FKEY_K, FKEY_L) VALUES (?, ?)")
如果说EclipseLink使用LKL的序列生成器并在插入时使用列PKEY作为连接表,我该怎么做?
以下是表格和类。 主键是通过oracle序列生成的。序列的名称类似于SEQ_TABLLE_NAME_PKEY。
感谢您的帮助
卡斯滕
TABLE L:
PKEY NUMBER(10) -- PRIMARY KEY
NAME VARCHAR2(10)
TABLE K:
PKEY NUMBER(10) -- PRIMARY KEY
NAME VARCHAR(10)
FKEY_K NUMBER(10)
Join table L_K_L
PKEY NUMBER(10) -- PRIMARY KEY
FKEY_L NUMBER(10) -- foreign key to table L
FKEY_K NUMBER(10) -- foreign key to table K
现在是模型类:
L组:
@Entity
@Table(name="L")
public class L implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="L_SEQ")
@SequenceGenerator(name="L_SEQ", sequenceName="SEQ_L_PKEY", allocationSize=1)
private Long pkey;
@NotNull
@javax.validation.constraints.Size(min=1, max=80)
private String name;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name="L_K_L",
joinColumns=
@JoinColumn(name="FKEY_L"),
inverseJoinColumns=
@JoinColumn(name="FKEY_K")
)
private Collection<K> k;
K班:
@Entity
@Table(name="K")
public class K implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="K_SEQ")
@SequenceGenerator(name="K_SEQ", sequenceName="SEQ_K_PKEY", allocationSize=1)
private Long pkey;
private String name;
@ManyToOne
@JoinColumn(name = "FKEY_K", referencedColumnName = "PKEY")
private K k;
LKL类
@Entity
@Table(name="L_K_L")
public class LKL implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="LKL_SEQ")
@SequenceGenerator(name="LKL_SEQ", sequenceName="SEQ_L_K_L_PKEY", allocationSize=1)
private Long pkey;
private L l;
private K k;