Java 冬眠。如何将两个实体映射为一个?

Java 冬眠。如何将两个实体映射为一个?,java,database,hibernate,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",

我在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();
Query Query=getCurrentSession().createNativeQuery(
“从HtmlDesc A、HtmlData B中选择*,其中A.linkId=B.linkId”,
Html.class);
返回query.getResultList();
映射到新实体Html=HtmlDesc+HtmlData。 是否有一些智能代码来编写这样的实体

之后,我找到了相关的话题,如果有人有类似的问题,这些话题会很有帮助:

如果我对您的问题的理解是正确的,那么@sqlresultsetmap就是您想要的

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

作为你案例的一个例子

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")})})
List results=em.createNativeQuery(“select*from html h JOIN htmla ha ON h.id=ha.id”,“HtmlaHtmlbMapping”).getResultList();
@SqlResultsMapping(
name=“HtmlaHtmlbMapping”,
实体={
@实体结果(
entityClass=HTML.class,
字段={
@FieldResult(name=“id”,column=“id”),
@FieldResult(name=“detail”,column=“detail”)}),
@实体结果(
entityClass=HTMLA.class,
字段={
@FieldResult(name=“id”,column=“id”),
@FieldResult(name=“name”,column=“name”)})