java - JPA-连接非实体类中的两个表

标签 java mysql sql jpa

我是新手,尝试谷歌,但我无法解决我的查询。 请帮忙。

我正在尝试映射两个实体:我的 POJO 类 PersonC 中的 PersonA 和 Person

@Entity
class PersonA{
     String sample_field;
}

@Entity
class Person{
     String id;
     String name;

}

以上两个是jpa的实体。

现在我想将它们合并到一个 pojo 类中。

class PersonC
{
   Strind id;
   String address;
}

尝试了下面的代码,但是当我尝试获取地址/外键字段时它不起作用。

@SqlResultSetMapping(name="PersonC", 
classes = {
   @ConstructorResult(targetClass = PersonC.class, 
    columns = {@ColumnResult(name="name")
              , @ColumnResult(name="address")
    )}

我应该在哪里定义 @SqlResultSetMapping ,为上面的哪个类? ) })

最佳答案

@SqlResultSetMapping 可以放置在任何 实体类中(不要注释 POJO - 它不会工作)。在 JPA 2.1 版中添加了使用 @ConstructorResult 映射到 POJO 类。与映射一起使用的 POJO 必须具有正确的构造函数。

All columns corresponding to arguments of the intended constructor must be specified using the columns element of the ConstructorResult annotation in the same order as that of the argument list of the constructor.

请引用以下示例和查询用法,并相应地解决您的问题。

@Entity
public class Address {
    @Id int id;  
    String street;
}


@SqlResultSetMapping(name="PersonDTOMapping",
    classes = {
     @ConstructorResult(targetClass = PersonDTO.class,
       columns = {@ColumnResult(name="name"), @ColumnResult(name="street")}
     )}
)
@Entity
public class Person {
    @Id int id;
    String name;
    Address address;  
}  

public class PersonDTO {
    String name;
    String street;
    public PersonDTO(String name, String street) {
        this.name = name;
        this.street = street;
    }
}

// usage
Query query = em.createNativeQuery(
    "SELECT p.name AS name, a.street AS street FROM Person p, Address a WHERE p.address_id=a.id",
    "PersonDTOMapping");
List<PersonDTO> result = query.getResultList();

请注意,别名(AS nameAS street)必须与 @ColumnResult 中的名称匹配。 该示例针对 Ecliselink 2.5.1 进行了测试。

关于java - JPA-连接非实体类中的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25179180/

相关文章:

php - 制作权限系统的有效方法是什么?

mysql - 是否可以创建一个 exe 给我一个将东西写入数据库的接口(interface)?

MySQL查询获取天数指定日期范围内的数据

sql - 如何在 SQL 中搜索级别订单值?

java - ArrayIndexOutOfBoundsException : -1 in recursive sorting

java - 如何使用java检查Oracle过程是否正确创建?

Java数据结构计算玩家手中的牌

sql - Oracle列是否有自动修改时间戳记类型?

sql - T-SQL中的ANY或IF存在

java - 数据库表架构建议