hibernate JPA查询仅适用于命名空间

时间:2013-01-04 09:03:34

标签: java hibernate jpa-2.0

我有一个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;
    }
}

2 个答案:

答案 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();

因此应该工作