Java 查询我的JPA提供程序(Hibernate)以获取<;Id、名称>;实体的

Java 查询我的JPA提供程序(Hibernate)以获取<;Id、名称>;实体的,java,hibernate,jpa,composite,Java,Hibernate,Jpa,Composite,我有一个类似这样的实体: Id(主键) 名称 其他商业地产和协会 我需要我的DAL(以hibernate作为提供者的JPA)返回一个与某些约束相关的实体列表(或者只返回它们全部),但是我不想返回实体本身,我只希望接收Id和Name属性。 我知道这可以通过HQL/SQL(类似于:select id,name from entity where…)实现,但我不想走这条路。 我在考虑以某种方式将配对定义为实体的合成部分,并认为这可能对我有所帮助,但我不确定这是否“合法”,因为Id就是PK。 该场景的逻


我有一个类似这样的实体:
Id(主键) 名称
其他商业地产和协会

我需要我的DAL(以hibernate作为提供者的JPA)返回一个与某些约束相关的实体列表(或者只返回它们全部),但是我不想返回实体本身,我只希望接收Id和Name属性。
我知道这可以通过HQL/SQL(类似于:select id,name from entity where…)实现,但我不想走这条路。
我在考虑以某种方式将配对定义为实体的合成部分,并认为这可能对我有所帮助,但我不确定这是否“合法”,因为Id就是PK。
该场景的逻辑是有一个文本框,该文本框异步查询web服务(并通过它查询DAL)中的相关实体,一旦选择了一个实体,则将其作为一个整体加载并发送到前端

更新:
我现在非常有信心我将使用JPA的CriteriaBuilder接口来构建查询,因此JPQL/HQL完全不在讨论之列。
我想我可能正在寻找与Hibernate的resultTransformer等价的JPA(我将给它一个非持久化类)

如有任何反馈,将不胜感激,
很抱歉忽略这一点,因为我遗漏了你问题中的“不想做HQL”部分

hqlselect子句非常灵活。如果您只需要两个属性,则可以使用

select new MyClass(foo.id,foo.name) From Foo foo
其中MyClass是具有构造函数(id、名称)的java类

如果不想创建单独的类,HQL可以返回Object类型的数组

select foo.id,foo.name From Foo foo

请阅读文档中有关select子句的详细信息

根据您的要求,我想HQL或JPQL是最好的选择,以及更改字段名称的频率

您可以使用@NamedQuery将HQL保存在同一实体类中,这样在更改字段名时就不会错过该更改。

为什么不使用HQL/JPAQL?我不喜欢这样一个事实,即查询不编译,当属性更改时会生成错误(这可能更难注意)+1-我不知道在HQL中可以使用
new
关键字