我的模型中有以下内容: 完车?
private ObjectProperty<InMonter> inMonter = new SimpleObjectProperty<>();
@ManyToOne
@JoinColumn(name = "in_Monter_Id",referencedColumnName="inMonterId" )
public InMonter getInMonter() {
return inMonter.get();
}
public ObjectProperty<InMonter> inMonterProperty() {
return inMonter;
}
public void setInMonter(InMonter inMonter) {
this.inMonter.set(inMonter);
}
的Monter:
private List<FinishedCar> fCar;
@OneToMany(mappedBy ="inMonter")
public List<FinishedCar> getfCar() {
return fCar;
}
public void setfCar(List<FinishedCar> fCar) {
this.fCar = fCar;
}
我想要完成的是让这个映射再次这样:
private ObjectProperty<InMonter> outMonter = new SimpleObjectProperty<>();
@ManyToOne
@JoinColumn(name = "out_monter_id",referencedColumnName="inMonterId")
public InMonter getMonterOut() {
return outMonter.get();
}
public ObjectProperty<InMonter> monterOutProperty() {
return outMonter;
}
public void setMonterOut(InMonter outMonter) {
this.outMonter.set(outMonter);
}
和这个
private List<FinishedCar> OutCar;
@OneToMany(mappedBy ="outMonter")
public List<FinishedCar> getOutCar() {
return OutCar;
}
public void setOutCar(List<FinishedCar> OutCar) {
this.OutCar = OutCar;
}
当我尝试连接两次时,我得到了
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.atlas.model.FinishedCar.outMonter in com.atlas.model.InMonter.outCar
但是,如果我只使用一个ManyToOne注释它工作正常,我没有混合我的注释,我在我的课上使用了AccesType.property。
根据这个链接Multiple @ManyToOne fields pointing to same entity in JPA / Hibernate我想要完成的是什么,那为什么我会有错误呢?
最后: 我需要的是在我的成品车中有两个monter字段,但它们都来自同一个实体,名为Monter。我可以通过使用不同的表格来实现这一目标,但这样做毫无意义。
答案 0 :(得分:1)
在这种情况下,Hibernate使用属性名称的getter名称(而不是字段名称)。
@Entity
class FinishedCar {
@ManyToOne
@JoinColumn(name = "in_monter_id")
public Monter getInMonter() {
}
@ManyToOne
@JoinColumn(name = "out_monter_id")
public Monter getOutMonter() {
}
}
@Entity
class Monter {
@OneToMany(mappedBy ="inMonter")
public List<FinishedCar> getfCar() {
}
@OneToMany(mappedBy ="outMonter")
public List<FinishedCar> getOutCar() {
}
}
请学习Java命名约定并始终(!)使用它。将来你会遇到更少的问题。例如,您不应该使用这样的字段名称:OutCar
。
另外,尝试了解属性名称如何与getter和setter名称相对应。例如,你应该让getter和setter拥有一个属性。
答案 1 :(得分:0)
我必须感谢v.ladynew和XtremeBaumer,寻求帮助。
首先,我有一个问题,我没有使用正确的命名为我的第二个字段,第二个我没有使用@Column注释我的id列,所以hibernate会混淆,当我纠正这些并开始使用Monter类而不是InMonter类我设法让它工作:
示例
@OneToMany(mappedBy ="outMonter")
public List<FinishedCar> getFinishedCars() {
return finishedCars;
}
public void setFinishedCars(List<FinishedCar> finishedCars) {
this.finishedCars = finishedCars;
}
@OneToMany(mappedBy ="inMonter")
public List<FinishedCar> getFinishedCarsTest() {
return finishedCarsTest;
}
public void setFinishedCarsTest(List<FinishedCar> finishedCarsTest) {
this.finishedCarsTest = finishedCarsTest;
}
和
@ManyToOne
@JoinColumn(name="outMonterId",referencedColumnName = "monterId")
public Monter getOutMonter() {
return outMonter.get();
}
@ManyToOne
@JoinColumn(name="inMonterId",referencedColumnName = "monterId")
public Monter getInMonter() {
return inMonter.get();
}
即使这个映射本身是正确的,但它不会起作用,直到我在我的id字段上添加了@Column:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="monterId")
public int getId() {
return monterId.get();
}