获取没有相应成员的多个实体

时间:2015-10-10 16:16:02

标签: java hibernate

Hibernate是否可以通过单个查询获取多个实体,如

SELECT main.*, second.*, third.*
FROM main
LEFT JOIN second ON second.mainId = main.id
LEFT JOIN third ON third.mainId = main.id

这里,second.mainIdthird.mainId是外键,类中有相应的成员。主要对应于其他表格中没有成员。

如果有INNER JOIN且只有一个表,我可以撤消查询,获取另一个实体并从中获取main。这样我就不知道了。我更喜欢Criteria解决方案,但我也对其他人感兴趣。

2 个答案:

答案 0 :(得分:0)

<强>

是,

首先,您必须根据要求创建映射

  

如果您需要针对不同表的不同类,您可以创建多个映射文件并使用one-to-one或   many-to-one个关联。根据你可能有的例子   类mainsecondthird等类。请参阅这些文件   many-to-oneone-to-one

-

  

根据您的要求,如果只需要一个映射文件,您可以创建一个映射文件并使用预期属性链接   property映射。您可以关联joinssub queries,   formulas具有hibernate属性。你可以参考   documentation的hibernate属性映射了更多信息。您可以使用   named-querynative sql query

所以,请参考这些方法并选择您真正想要的内容。

答案 1 :(得分:0)

带有Criteria Query的@OneToOne和@PrimaryKeyJoinColumn将在单个sql中提供所需的结果

//主要实体

    @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();