我对 Hibernate 有一个奇怪的(无论如何对我来说)问题,我无法理解。下面的代码是我尝试使用附加实体 CaseToSuggestion 对实体 Case 和 Suggestion 之间的属性建模 ManyToOne 关系,其中 Case 是我的聚合根:
@Entity
@Table(name = "sga_cases")
public class Case {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
// Business key
@Column(name = "caseid", unique = true, nullable = false)
private String caseId;
...
@OneToMany(mappedBy = "associatedCase", orphanRemoval = true, cascade = CascadeType.ALL)
private Set<CaseToSuggestion> associatedSuggestions = new HashSet<CaseToSuggestion>();
...
}
@Entity
@Table(name = "sga_suggestions")
public class Suggestion {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "suggestionid", unique = true, nullable = false)
private String suggestionId;
@Column(name = "localizationkey", nullable = false)
private String localizationKey;
@OneToMany(mappedBy = "associatedSuggestion", orphanRemoval = true, cascade = CascadeType.ALL)
private Set<CaseToSuggestion> caseMapping = new HashSet<CaseToSuggestion>();
...
}
@Entity
@Table(name = "sga_case2suggestion")
public class CaseToSuggestion {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "feedback")
private float feedback;
@ManyToOne
@JoinColumn(name = "caseid")
private Case associatedCase;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "suggestionid")
private Suggestion associatedSuggestion;
...
}
如果我为上述实体创建新对象,设置适当的关联,然后将它们与 EntityManager 一起存储,一切正常:
Case c = new Case(...)
Suggestion sugg = new Suggestion(...);
CaseToSuggestion case2sugg = new CaseToSuggestion(c, sugg, 1.0f);
c.getAssociatedSuggestions().add(case2sugg);
sugg.getAssociatedCases().add(case2sugg);
其次是entityManager.persist(c);
如果我想为已经在数据库中的案例添加新的关联,我会从 EntityManager 中检索我想要关联的案例和建议实体,并将它们添加到新的 CaseToSuggestion:
CaseToSuggestion c2s = new CaseToSuggestion(c, s, fb);
c.getAssociatedSuggestions().add(c2s);
s.getAssociatedCases().add(c2s);
其次是entityManager.merge(c);
CaseToSuggestion 实体存储在数据库中,但对于每个条目,我都会得到一个“幽灵条目”,其中包含新生成的 id 和所有字段为空:
+----+----------+--------+--------------+
| id | feedback | caseid | suggestionid |
+----+----------+--------+--------------+
| 3 | 1 | 3 | 1 |
| 4 | 1 | 4 | 2 |
| 5 | 1 | 5 | 2 |
| 6 | 0 | NULL | NULL |
| 7 | 1 | 6 | 2 |
| 8 | 0 | NULL | NULL |
| 9 | 1 | 7 | 2 |
| 10 | 0 | NULL | NULL |
+----+----------+--------+--------------+
有人知道可能导致这种情况的原因吗?