我需要更改项目的模型。现在,我们有两个具有双向多对多关系的类(这意味着在关系表中),现在需要向关系添加额外的信息。
我的问题是:唯一的方法是为关系创建一个类(例如,使用与已存在的关系表相同的名称创建一个类)?
我这么问是因为如果我们需要改变项目中的上述关系,那么这个改变将会产生非常大的影响,几乎影响整个项目(认真的)。
我所说的两个类只是为了让大家更清楚:
@Entity
public class Serie extends AbstractEntity {
@ManyToMany
private List<Disciplina> disciplinas;
}
@Entity
public class Disciplina extends AbstractEntity {
@ManyToMany(mappedBy = "disciplinas")
private List<Serie> series;
}
正如评论中所建议的,您需要一个连接实体,但不需要将其公开给域模型的客户端:通过执行类似下面的操作,您只需要更改直接修改集合的任何客户端代码即可调用 addXXX/removeXXX方法。没有客户端代码只知道 Join 实体。因此,对 Java 代码的更改应该很小。
至于查询,您显然需要根据需要更改它们。
Serie
@Entity
public class Serie extends AbstractEntity {
@OneToMany(mappedBy = "serie")
private List<SerieDisciplina> serieDisciplinas;
public List<Disciplina> getDisciplinas(){
//disciplinas extracted from serieDisciplinas
return Collections.unmodifiableList(...);
}
public void addDisciplina(Disciplina disciplina){
SerieDisciplina sd = new SerieDisciplina();
sd.stSerie(this);
sd.setDisciplina(disciplina);
serieDesciplinas.add(sd);
}
}
纪律
@Entity
public class Disciplina extends AbstractEntity {
@ManyToMany(mappedBy = "disciplina")
private List<SerieDisciplina> serieDisciplinas;
public List<Serie> getSeries(){
//series extracted from serieDisciplinas
return Collections.unmodifiableList(...);
}
public void addSerie(Serie serie){
SerieDisciplina sd = new SerieDisciplina();
sd.stSerie(Serie);
sd.setDisciplina(this);
serieDesciplinas.add(sd);
}
}
加入实体
@Entity
public class SerieDisciplina{
@ManyToOne
private Serie serie;
@ManyToOne
private Disciplina disciplina;
//fields for the additional data about the relationship
//getters and setters
}
Hibernate 文档建议避免@ManyToMany
首先要避免此类问题。参见讨论:Hibernate 最佳实践:避免多对多和“异国情调”关系 https://stackoverflow.com/q/18594234/1356423
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)