INSERT上的JoinTable中未设置主键(Eclipselink)

时间:2015-03-19 07:36:55

标签: eclipselink primary-key jointable

我有两个表,通过连接表有很多关系。实体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;

0 个答案:

没有答案