Hibernate是否可以通过单个查询获取多个实体,如
SELECT main.*, second.*, third.*
FROM main
LEFT JOIN second ON second.mainId = main.id
LEFT JOIN third ON third.mainId = main.id
这里,second.mainId
和third.mainId
是外键,类中有相应的成员。主要对应于其他表格中没有成员。
如果有INNER JOIN
且只有一个表,我可以撤消查询,获取另一个实体并从中获取main
。这样我就不知道了。我更喜欢Criteria
解决方案,但我也对其他人感兴趣。
答案 0 :(得分:0)
<强> 强>
首先,您必须根据要求创建映射。
如果您需要针对不同表的不同类,您可以创建多个映射文件并使用
one-to-one
或many-to-one
个关联。根据你可能有的例子 类main
,second
和third
等类。请参阅这些文件many-to-one
和one-to-one
。
-
根据您的要求,如果只需要一个映射文件,您可以创建一个映射文件并使用预期属性链接
property
映射。您可以关联joins
,sub queries
,formulas
具有hibernate属性。你可以参考 documentation的hibernate属性映射了更多信息。您可以使用named-query
和native sql query
。
所以,请参考这些方法并选择您真正想要的内容。
答案 1 :(得分:0)
//主要实体
@Entity
@Table(name="main")
public class Main implements Serializable {
@Id
@GeneratedValue
@Column(name="main_id")
int mainId;
private String mainString;
@OneToOne(mappedBy = "main", cascade = CascadeType.ALL)
Secound second;
@OneToOne(mappedBy = "main", cascade = CascadeType.ALL)
Third Third;
...Getter-setters
}
}
// Secound&amp;第三类似的`
@Entity
@Table(name="secound")
public class Secound implements Serializable {
@Id
@Column(name="main_id", unique=true, nullable=false)
@GeneratedValue(generator="gen")
@GenericGenerator(name="gen", strategy="foreign", parameters=@Parameter(name="property", value="main"))
private int secId;
public String getSecoundString() {
return secoundString;
}
public void setSecoundString(String secoundString) {
this.secoundString = secoundString;
}
private String secoundString;
public int getSecId() {
return secId;
}
public void setSecId(int secId) {
this.secId = secId;
}
@OneToOne(fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn(name="sec_id")
private Main main;
public Main getMain() {
return main;
}
public void setMain(Main main) {
this.main = main;
}
}`
//在main方法中
List<Main> list=session.createCriteria(Main.class).list();