嗨所以我在两个表和两个视图之间进行了此设置。视图和表是彼此一对一的,但我需要始终访问这两者,遗憾的是无法更改我的数据库。这两个表具有多对一关系。所有表和视图都具有相同的主键名称,因此表和视图之间的连接很容易。
我有以下代码
//Model1.java The One
@Entity
@Table(name = "TABLE_1")
@SecondaryTable(name = "VIEW_1")
public class Model1 {
@Id
@GeneratedValue
@Column(name = "ID")
private Long id;
public Long getId() {
return this.id;
}
@OneToMany(mappedBy = "m1")
private List<Model2> m2s;
public List<Model2> getM2s() {
return this.m2s;
}
}
//Model2.java The Many
@Entity
@Table(name = "TABLE_2")
@SecondaryTable(name = "VIEW_2")
public class Model2 {
@Id
@GeneratedValue
@Column(name = "ID")
private long id;
public Long getId() {
return this.id;
}
@ManyToOne
@JoinColumn(name = "MODEL_1_ID")
private Model1 m1;
public void setM1 (Model1 m1) {
this.m1 = m1;
}
public Model1 getM1 () {
return this.m1;
}
}
然后我像这样使用它
Model1 m = Service.read(m1Key);
List<Model2> m2s = m.getM2s();
但是Hibernate JPA创建的sql是
SELECT ... FROM TABLE_2 t, VIEW_2 v WHERE t.ID = <m1Key>;
而不是
SELECT ... FROM TABLE_2 t, VIEW_2 v WHERE t.ID = v.ID AND t.MODEL_1_ID = <m1Key>;
因此,当我获得许多列表时,我的主表和辅助表之间的连接基本上没有发生。如果有注释或任何设置,您可以建议它将是一个巨大的帮助。