【发布时间】:2018-11-30 11:30:46
【问题描述】:
如何在聚合后使用 Hibernate OGM 从 MongoDB 中读取 @Embeddable 对象列表。
我有这样的实体
@javax.persistence.Entity
public class MySession implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Type(type = "objectid")
private String id;
private Date start;
private Date end;
@ElementCollection
private List<MySessionEvent> events;
}
和@Embeddable 对象
@javax.persistence.Embeddable
public class MySessionEvent implements Serializable {
private Long time;
private String name;
}
我坚持从本机查询映射可嵌入对象
String queryString = "db.MySession.aggregate([" +
" { '$match': { 'events.name': { '$regex': 'Abrakadabra'} }}, " +
" { '$unwind': '$events' }, " +
" { '$replaceRoot': { 'newRoot': '$events'}} " +
"])";
List<MySessionEvent> objects = em.createNativeQuery(queryString, MySessionEvent.class).getResultList();
我收到一个错误Caused by: org.hibernate.MappingException: Unknown entity
【问题讨论】:
-
确保您使用的是 @javax.persistence.Entity 而不是 org.hibernate.annotations.Entity
-
我正在使用它。我将在上面的代码示例中添加
-
没有整个堆栈跟踪很难回答。启动时会发生吗?问题可能是实体未正确注册。如果它发生在查询执行之后,可能是因为查询结果没有返回 Hibernate OGM 对实体的期望。有什么理由不使用 HQL?您要运行哪种查询?
-
我的意思是,你只是想返回带有嵌入集合的实体吗?因为如果您使用 HQL 查询,OGM 将为您创建实体。
-
不,执行查询时会出现问题。我已经在启动时在 DB 中创建了一些文档,所以我认为一切都配置正确。所以是的,我认为返回值不正确,但我不知道缺少什么。我想从会话中返回平面事件数组。这可以用 HQL 完成吗?
标签: java hibernate hibernate-mapping hibernate-ogm hibernate-native-query