gpt4 book ai didi

java - 在 OpenJPA 中合并树状结构?

转载 作者:行者123 更新时间:2023-12-04 06:07:11 24 4
gpt4 key购买 nike

我正在尝试使用 构建一个复合树状结构OpenJPA 2.1 由这些类组成:
Criterion - 基类,抽象类,
SingleCriterion - 实际的树叶,
CompositeCriterion - 实际的树节点

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="dtype",discriminatorType=DiscriminatorType.STRING)
public abstract class Criterion implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;

@ManyToOne
@JoinColumn(name="owner_id")
private Criterion owner;
}

public class SimpleCriterion extends Criterion{
@Column(name="comparison_op")
private String op;

@Column(name="simple_field_name")
private String fieldName;

@Column(name="simple_param_1")
private String fieldParam1;

@Column(name="simple_param_2")
private String fieldParam2;
}

public class CompositeCriterion extends Criterion{
@Column(name="composite_name")
private String name;

@Enumerated(EnumType.STRING)
@Column(name="logical_op")
private LogicalOp op;

@OneToMany(mappedBy="owner",fetch=FetchType.EAGER, cascade={CascadeType.PERSIST,CascadeType.MERGE}, orphanRemoval=true)
private List<Criterion> criterions;
}

正如你所看到的,那里没有什么太花哨的......

现在,多亏了 CascadeType,阅读和持久化整棵树的工作就像一个魅力。 .但是当我尝试删除 CompositeCriterion 时出现问题节点,因为它删除该节点并对子节点运行 DELETE 查询,这些子节点自然不存在,因为 ON DELETE CASCADE数据库表中的约束。这导致 OptimisticLockException被抛出

我尝试了很多东西,包括:
  • @Dependant criterions上的注释在 - 的里面
    CompositeCriterion
  • 添加 CascadeType.REMOVECascadeType.ALL
  • 添加 orphanRemoval=true (就像上面的代码一样)

  • ...但我仍然不断收到 OptimisticLockException扔...

    我迷路了!有没有人对下一步尝试有什么建议?

    提前致谢!

    最佳答案

    尝试设置以下属性:

    <property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/>

    Additional documentation

    关于java - 在 OpenJPA 中合并树状结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8211984/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com