休眠。如何将两个实体映射成一个?

时间:2017-10-03 14:25:03

标签: java database hibernate

我在DB中有两个表和两个实体。 HtmlDesc和HtmlData。

两者都具有相同的ID。 有没有办法在Hibernate中创建compund / merged实体而不重复来自这两个实体的代码。 我想执行法令

Query<Html> query = getCurrentSession().createNativeQuery(
            "SELECT * FROM HtmlDesc A, HtmlData B WHERE A.linkId = B.linkId",
            Html.class);
return query.getResultList();

映射到新实体Html = HtmlDesc + HtmlData。 是否有一些智能代码来编写这样的实体?

之后我找到了相关主题,如果有人遇到类似问题会有所帮助: JPA- Joining two tables in non-entity class

1 个答案:

答案 0 :(得分:1)

如果我对你的问题的理解是正确的,那么@SqlResultSetMapping就是你要找的。

这将提供自定义映射,其中实体管理器将能够将对象列表映射到特定实体

作为案例的例子

List<Object[]> results = em.createNativeQuery("select * from html h JOIN htmla ha ON h.id=ha.id","HtmlaHtmlbMapping").getResultList();

@SqlResultSetMapping(
    name="HtmlaHtmlbMapping",
    entities = {
            @EntityResult(
                    entityClass = HTML.class,
                    fields = {
                            @FieldResult(name="id",column = "id"),
                            @FieldResult(name = "detail", column = "detail")}),
            @EntityResult(
                    entityClass = HTMLA.class,
                    fields = {
                            @FieldResult(name="id",column = "id"),
                            @FieldResult(name = "name", column = "name")})})