如何使用查询从存储库中读取实体的特定变量?
How to read specific variables of an entity from repository using a query?
假设我们有一个具有 10 个变量的持久实体对象,如果我这样做,例如 repository.read(id)
或 repository.findById(id)
我将取回一个实体对象,其中包含从存储库中设置的每个变量.
有没有什么方法可以使用 JPAQuery 或 EntityManager 或任何其他可能的方法,使我可以在存储库上进行调用并取回实体对象,但又不会获取特定变量?
我尝试了以下方法,但它似乎没有做任何事情,仍然将 Set 带入响应中:
JPAQuery<Fruit> query = new JPAQuery<>(entityManager);
QFruit fruit = QFruit.Fruit;
Set<Apple> apple = new HashSet<Apple>();
query.select(fruit).from(fruit).where(fruit.id.eq(fruitId))
.createQuery().getParameters().remove(apple);
return query.fetchOne();
您可以使用任何自定义 POJO 获取结果并指定选择的内容。
https://docs.oracle.com/html/E13946_05/ejb3_langref.html#ejb3_langref_constructor
public interface AppleRepository extends CrudRepository<Apple, Long> {
@Query("SELECT new com.mypackage.Apple(a.field1, a.field2) FROM " +
" Apple a ")
List<Apple> findCustomApples();
}
其他方法是使任何特定列延迟加载。您可以使用注释来做到这一点。
最终我试图从 Table 的条目中读取特定数据,因为特定 table 的数据太多,影响了性能,因此整个实体仅用于 1或 2 个变量不正确。
最终帮助我的是 Tuple。
使用 JPAQuery 的优势在于您可以 select 从搜索中返回特定变量。
例如
JPAQuery<MyObject > query = new JPAQuery<>(entityManager);
MyObject myObject = QMyObject.MyObject ;
Tuple response = query.select(myObject.id, myObject.version)
.where(myObject.id.eq("12345")).or(myObject.version.eq("12345")).fetchaAll();
然后您可以轻松检索 Tuple 对象并将值作为数组处理。
假设我们有一个具有 10 个变量的持久实体对象,如果我这样做,例如 repository.read(id)
或 repository.findById(id)
我将取回一个实体对象,其中包含从存储库中设置的每个变量.
有没有什么方法可以使用 JPAQuery 或 EntityManager 或任何其他可能的方法,使我可以在存储库上进行调用并取回实体对象,但又不会获取特定变量?
我尝试了以下方法,但它似乎没有做任何事情,仍然将 Set 带入响应中:
JPAQuery<Fruit> query = new JPAQuery<>(entityManager);
QFruit fruit = QFruit.Fruit;
Set<Apple> apple = new HashSet<Apple>();
query.select(fruit).from(fruit).where(fruit.id.eq(fruitId))
.createQuery().getParameters().remove(apple);
return query.fetchOne();
您可以使用任何自定义 POJO 获取结果并指定选择的内容。
https://docs.oracle.com/html/E13946_05/ejb3_langref.html#ejb3_langref_constructor
public interface AppleRepository extends CrudRepository<Apple, Long> {
@Query("SELECT new com.mypackage.Apple(a.field1, a.field2) FROM " +
" Apple a ")
List<Apple> findCustomApples();
}
其他方法是使任何特定列延迟加载。您可以使用注释来做到这一点。
最终我试图从 Table 的条目中读取特定数据,因为特定 table 的数据太多,影响了性能,因此整个实体仅用于 1或 2 个变量不正确。 最终帮助我的是 Tuple。 使用 JPAQuery 的优势在于您可以 select 从搜索中返回特定变量。 例如
JPAQuery<MyObject > query = new JPAQuery<>(entityManager);
MyObject myObject = QMyObject.MyObject ;
Tuple response = query.select(myObject.id, myObject.version)
.where(myObject.id.eq("12345")).or(myObject.version.eq("12345")).fetchaAll();
然后您可以轻松检索 Tuple 对象并将值作为数组处理。