Sur*_*non 13 java hibernate jpa
我有3个类对应3个表V,D和P.D有一个FK到V(FK_V)并使用OneToMany关系加入.也是他们退出4台 V_D_P具有的这些关系V,D和P.
以下是这些数据模型的样子:
@Entity
@Table(name = "V")
public class V {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "ID")
private Long id;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name = "FK_V", referencedColumnName="Id", nullable = false)
private Set<D> d;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name = "FK_V", referencedColumnName="Id", nullable = false)
private Set<V_D_P> vdp;
//Getters Setters etc.
}
@Entity
@Table(name = "V_D_P")
public class V_D_P {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "ID")
private Long id;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "FK_D", nullable = false)
private D d;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "FK_P", nullable = false)
private P p;
//Getters Setters etc.
}
@Entity
@Table(name = "D")
public class D {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "ID")
private Long id;
//Getters Setters etc.
}
@Entity
@Table(name = "P")
public class P {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "ID")
private Long id;
//Getters Setters etc.
}
Run Code Online (Sandbox Code Playgroud)
现在我想坚持下去V,D以及P他们的关系.我是
V v = new V();
D d = new D();
Set<D> dSet = new HashSet<>();
dSet.add(d);
v.setD(dSet); // Adding d to V ....(1)
P p = new P();
V_D_P vdp = new V_D_P();
vdp.setD(d); // Adding d to V_D_P ....(2)
vdp.setP(p);
Set<V_D_P> vdpSet = new HashSet<V_D_P>();
vdpSet.add(vdp);
v.setVdp(vdpSet);
entityManager.persist(v);
Run Code Online (Sandbox Code Playgroud)
现在你可以看到我正在添加d两次相同的对象.一次到P,一次到V_D_P.但是,由于它们是相同的对象,因此只能存在一次.但是根据hibernate日志,我看到hibernate试图插入2个不同的对象.
我还看到以下异常:ORA-00001:唯一约束
有没有办法让hibernate这些是相同的对象并且只持有它们一次?
| 归档时间: |
|
| 查看次数: |
4986 次 |
| 最近记录: |