我正在使用eclipselink运行一些本地sql。我需要将数据返回到pojo中。我按照eclipselink文档中的说明操作,但收到了错误消息 Missing descriptor for [Class]
已命名查询列以匹配pojo的成员变量。我需要做一些额外的Map吗?
波乔:
public class AnnouncementRecipientsFlattenedDTO {
private BigDecimal announcementId;
private String recipientAddress;
private String type;
public AnnouncementRecipientsFlattenedDTO() {
super();
}
public AnnouncementRecipientsFlattenedDTO(BigDecimal announcementId, String recipientAddress, String type) {
super();
this.announcementId = announcementId;
this.recipientAddress = recipientAddress;
this.type = type;
}
... Getters/Setters
实体经理电话:
public List<AnnouncementRecipientsFlattenedDTO> getNormalizedRecipientsForAnnouncement(int announcementId) {
Query query = em.createNamedQuery(AnnouncementDeliveryLog.FIND_NORMALIZED_RECIPIENTS_FOR_ANNOUNCEMENT, AnnouncementRecipientsFlattenedDTO.class);
query.setParameter(1, announcementId);
return query.getResultList();
}
5条答案
按热度按时间3pvhb19x1#
我发现可以将本机查询执行的结果放入包含对象的数组列表中。然后可以遍历列表和数组元素并构建所需的实体对象。
zynd9foi2#
如果类已Map,则只能对该类使用本机sql查询。您需要将announcementRecipientsFlattenedTo类定义为@实体。
否则,只需使用sql创建本机查询,并获取一个数据数组,然后使用该数据构建dto。
qxsslcnc3#
老问题,但可能是下面的解决办法会帮助别人。
假设您希望返回oracle中给定表的列、数据类型和数据长度的列表。我在下面写了一个本机示例查询:
现在需要根据上述查询的结果构造一个pojo列表。
定义
TableColumn
实体类如下:现在我们准备构建一个pojo列表。使用下面的示例代码构造一个pojo列表,以获得您的结果。
q1qsirdb4#
另外,别忘了在中添加pojo类
persistence.xml
! 如果您习惯于ide为您管理该文件,那么很容易忽略这一点。dkqlctbz5#
遇到了同样的问题,我想返回一个pojo列表,实际上只返回pojo(如果需要,可以称之为dto),而不是@entity注解对象。
使用以下查询:
从数据库创建pojoexample,而不需要对pojoexample进行实体注解。您可以在这里的oracle文档中找到方法调用。
编辑:事实证明,您必须使用@sqlresultsetmapping才能工作,否则您的query.getresultlist()将返回一个对象列表。
只要把它放在@entity注解下就行了(所以在本例中可以放在tablea或tableb中,因为pojoexample没有@entity注解)