我有一个JAR,它只包含我的模型,这些模型是带注释的类。然后是加载JAR的应用程序。
在app的persistence.xml中我有:
<jar-file> my jar </jar-file>
并在属性中:
<property name="hibernate.archive.autodetection" value="class" />
有效。检测到实体,此查询正常工作:
List<Event> events = em.createQuery(
"from com.my.namespace.model.Event", Event.class).getResultList();
但是我绝对需要在查询中拥有命名空间...如果我这样做:
List<Event> events = em.createQuery("from Event", Event.class).getResultList();
然后我得到了这个例外:
Event is not mapped [from Event]
更令人沮丧的是,我向JPA提供了类,Event.class作为我调用的第二个参数。 Java代码导入正确的包。
如何让JPAQL / HQL“导入”正确的包以查看该实体而无需明确键入命名空间?
更新:这里是Event.java,如果它有帮助..它是如此微不足道:
package com.my.namespace.model;
import javax.persistence.*;
@Entity(name="events")
@SequenceGenerator(name="events_id_seq", sequenceName="events_id_seq")
public class Event {
@Id @Column(name="id") @GeneratedValue(generator="events_id_seq")
private Long mId;
@Column(name="title")
private String mTitle;
public Long getId() {
return mId;
}
public String getTitle() {
return mTitle;
}
public void setTitle(String title) {
mTitle = title;
}
}
答案 0 :(得分:2)
@Entity(name="events")
是罪魁祸首
必须是
@Entity
@Table(name="events")
如果您将事件作为db表名称。否则,请在查询中使用events
,而不是Event
答案 1 :(得分:2)
由于您的实体名称是“events”(来自@Entity(name =“events”)),您应该从“事件”中选择而不是“事件”。
List<Event> events = em.createQuery("from events", Event.class).getResultList();
因此应该工作