我遇到了一个问题,无法持久化或合并只包含 ID 和其他对象集合的对象。如果我添加另一个字段,则会正常提交事务。同时,如果我将ID生成策略更改为AUTO,也可以起作用。
我的团队其余成员使用“IDENTITY”而不是“AUTO”,所以我想与他们保持一致。他们的实体不仅仅是ID + 集合,所以对他们来说很好用。以下是我想使其工作的内容:
@Entity
public class Filter implements Serializable {
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
private Long id;
@OneToMany( fetch = FetchType.EAGER, orphanRemoval = true, cascade = { CascadeType.ALL } )
private ArrayList<Rule> rules = new ArrayList<>();
public Filter() {
}
}
错误信息:
org.apache.openjpa.persistence.PersistenceException: ERROR: syntax error at or near ")"
Position: 25 {prepstmnt 693640431 INSERT INTO Filter () VALUES ()} [code=0, state=42601]
FailedObject: middle.ware.Filter@630cd05
本质上,因为它只是一个ID和Join Table,所以在没有任何字段的情况下尝试持久化或合并过滤器时,它会失败。
解决方案
将GenerationType.IDENTITY更改为GenerationType.AUTO。
-唯一的缺点似乎是初始起始主键跳动50,然后开始逐一增加。
将GenerationType更改为TABLE
-这似乎就是AUTO选择的。
向实体添加一个任意字段(即String test = "test")。
-只需使实体有一个以上的字段即可使其持久化。但是,我不需要这个字段;我只想要一个集合
使关系双向。
-通过使关系双向,表格具有回溯id(而不仅仅是一个id)。这仅适用于Filter由另一个记录拥有的情况。