java ee jpa eclipselink外键在子表中为null

时间:2017-05-03 10:59:52

标签: java postgresql jpa eclipselink java-ee-7

我正在使用带有JPA,eclipselink和postgres的JavaEE。我想设置父和子实体的Id,而不是为数据库序列调用nextval

我的旧代码是:

@Entity
@SequenceGenerator(name="seq", initialValue=1, allocationSize=1)
public class Parent{

    // Use the sequence that is defined above:
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
    @Id long id;

    @OneToMany(mappedBy="parent")
    List<Child> children = new ArrayList<>();

}

@Entity
@SequenceGenerator(name="seq", initialValue=1, allocationSize=1)
public class Child{

    // Use the sequence that is defined above:
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
    @Id long id;

    @ManyToOne()
    @JoinColumn()
    Parent parent;

}

如果我为每个父母坚持1000个父母和1000个孩子,那么将执行1001000个nextVal('seq')查询,这会减慢我的工作。

所以我试试这个:

@Entity
@SequenceGenerator(name="seq", initialValue=1, allocationSize=1)
public class Parent{

    @Column(insertable=false,columnDefinition="integer not null default (nextval'seq'::regclass)")
    @Id long id;

    @OneToMany(mappedBy="parent")
    List<Child> children = new ArrayList<>();

}

@Entity
@SequenceGenerator(name="seq", initialValue=1, allocationSize=1)
public class Child{

    @Column(insertable=false,columnDefinition="integer not null default (nextval'seq'::regclass)")
    @Id long id;

    @ManyToOne()
    @JoinColumn()
    Parent parent;

}

没有查询从JPA查找nextval。它适用于父和子id,但子的forgin键始终设置为null。

我该如何解决这个问题?我只是不希望JPA每次都致电nextval

0 个答案:

没有答案