我正在使用带有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
。