【问题标题】:Master Detail ID For Foreign key in JPAJPA中外键的主从ID
【发布时间】:2018-02-11 07:03:56
【问题描述】:

我有三张桌子, 其中之一是(场景),它是主表, 另外两个表(链接,节点)是它的详细信息。 我希望 JPA 为我保留外键,同时在链接和节点表中保留场景而无需我的干预, 有没有人帮我做这个???

enter image description here

场景:

@Entity
@NamedQueries({ @NamedQuery(name = "Scenario.findAll", query = "select o from Scenario o") })
public class Scenario implements Serializable {
private String className;
@Id
@Column(nullable = false,name="ID")
private int id;
private String linkFromPortIdProperty;
private String linkToPortIdProperty;
private String UUID;
@OneToMany(mappedBy = "scenario", cascade = { CascadeType.PERSIST, CascadeType.MERGE })
private List<Link> linkDataArray;
@OneToMany(mappedBy = "scenario1", cascade = { CascadeType.PERSIST, CascadeType.MERGE })
private List<Node> nodeDataArray;

链接:

@Entity
@NamedQueries({ @NamedQuery(name = "Lnk.findAll", query = "select o from Link o") })
@Table(name = "LNK", schema = "DEV_SGMNT")

public class Link implements Serializable {
private static final long serialVersionUID = -5262332521707870082L;


@Transient
private String to;
private int fromPort;
@Id
@Column(nullable = false)
private int id;
private double[] points;
@Transient
private String from;
private int toPort;
@ManyToOne
@JoinColumn(name = "SCENARIO_ID")
private Scenario scenario;

节点:

@Entity
@NamedQueries({ @NamedQuery(name = "Node.findAll", query = "select o from Node o") })
public class Node implements Serializable {
private static final long serialVersionUID = -8401815303355236645L;
private String classname;
@Id
@Column(nullable = false)
private int id;
private BigDecimal inbound;
private String key;
private BigDecimal outbound;
private String properties;
private String tab;
private String text;
private String vizitems;
@ManyToOne
@JoinColumn(name = "SCENARIO_ID")
private Scenario scenario1;

【问题讨论】:

  • 我想我明白no intervention 的意思。但是,为了清楚起见,我建议您在代码中添加 sn -p 用于保存 ...persist(link) 的代码以及数据库中的预期结果。

标签: java jpa jakarta-ee entity master-detail


【解决方案1】:

在持久化主实体(场景)时,对所有要持久化的细节对象使用 CascadeType.ALL。

@OneToMany(mappedBy = "scenario",cascade = CascadeType.ALL, orphanRemoval = true) 
private List<Link> linkDataArray;

阅读 vladmihalcea 撰写的本指南:

Reference

【讨论】:

    猜你喜欢
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2019-04-22
    • 2018-02-02
    相关资源
    最近更新 更多