仅从表中选择一些列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅从表中选择一些列相关的知识,希望对你有一定的参考价值。
有没有办法使用jpa从表中选择一些列?
我的表很大,我不允许映射我的实体中的所有列。我试图创建一个实体(作为旁注,我的表中没有PK):
@Entity
@Table(name = "SuperCat")
@Getter
@Setter
public class Cat{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Column(name="nameCat")
private String name;
}
然后在我的存储库中
public interface CatRepository extends
CrudRepository<Cat, Long> {
@Query(
"SELECT name FROM Cat")
Page<Cat> getAlCats(Pageable pageable);
这只是一个简单的例子,但想法是一样的。我搜索了很多,我找到了投影,但是你需要映射整个表格,然后我找到了原生查询,但仍然不适用。我知道我可以返回一个Object,另一个解决方案是使用带有NEW的查询并创建我自己的对象(没有@entity,就像一个pojo)。但有没有办法可以使用jpa来实现这一点,以便能够使用存储库和服务,如果我正在创建自己的pojo,那么我将创建一个@transactional类将查询(使用NEW)放在那里,就是这样。我不喜欢这种方法,我不认为jpa不允许你只选择一些列,但我找不到合适的方法。也许你会问如果我这样做的结果是什么:我得到这个错误:“无法使用请求的结果类型[java.lang.Long]创建带有多个返回的查询的TypedQuery”(对于新查询,我是谈论:http://www.java2s.com/Tutorials/Java/JPA/4800__JPA_Query_new_Object.htm也许我不清楚)
您可以使用以下方法执行相同操作。
只需在实体类中创建一个包含所有必需参数的构造函数,然后在jpa查询中使用查询中的new运算符,如下所示。
String query = "SELECT NEW com.dt.es.CustomObject(p.uniquePID) FROM PatientRegistration AS p";
TypedQuery<CustomObject> typedQuery = entityManager().createQuery(query , CustomObject.class);
List<CustomObject> results = typedQuery.getResultList();
return results;
并且CustomObject
类应该与构造函数类似。
public class CustomObject {
private String uniquePID;
public CustomObject(String uniquePID) {
super();
this.uniquePID = uniquePID;
}
public String getUniquePID() {
return uniquePID;
}
public void setUniquePID(String uniquePID) {
this.uniquePID = uniquePID;
}
}
qazxsw poi不需要映射整个表,只需选择必要的字段:
spring-data-jpa projection
通过这种方式,Catto是一个接口,它只包括整个表的一些字段。其字段名称需要与选择字段的别名相匹配。
以上是关于仅从表中选择一些列的主要内容,如果未能解决你的问题,请参考以下文章