0

我有一个 JAR,它只包含我的模型,这些模型是带注释的类。然后是加载 JAR 的应用程序。

在应用程序的 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]

更令人沮丧的是,我将类 Event.class 作为调用的第二个参数提供给 JPA。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;
    }
}
4

2 回答 2

2

@Entity(name="events")是罪魁祸首

它一定要是

          @Entity
          @Table(name="events")

如果您打算将事件作为数据库表名。否则events在您的查询中使用,而不是Event

于 2013-01-04T09:13:21.890 回答
2

由于您的实体名称是“events”(来自@Entity(name="events")),您应该从“events”而不是“event”中选择。

List<Event> events = em.createQuery("from events", Event.class).getResultList();

因此应该工作

于 2013-01-04T09:13:31.350 回答