Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用hibernate通过向JPA中现有的持久化单元添加带注释的类来更新模式?_Java_Hibernate_Jpa 2.0_Java Ee 6 - Fatal编程技术网

Java 如何使用hibernate通过向JPA中现有的持久化单元添加带注释的类来更新模式?

Java 如何使用hibernate通过向JPA中现有的持久化单元添加带注释的类来更新模式?,java,hibernate,jpa-2.0,java-ee-6,Java,Hibernate,Jpa 2.0,Java Ee 6,环境:JPA2.0、Hibernate3.6,在war文件中(使用JSF2.0,在JBoss6上,等等)。 我希望通过使用hibernate向JPA中现有的持久化单元添加带注释的类来更新模式。这就是我试图做的: public void updateConfiguration() { // load classes Ejb3Configuration ejb3Configuration = new Ejb3Configuration(); ejb3Configuration

环境:JPA2.0、Hibernate3.6,在war文件中(使用JSF2.0,在JBoss6上,等等)。
我希望通过使用hibernate向JPA中现有的持久化单元添加带注释的类来更新模式。这就是我试图做的:

public void updateConfiguration() {
    // load classes
    Ejb3Configuration ejb3Configuration = new Ejb3Configuration();
    ejb3Configuration = ejb3Configuration.configure("existingPU", null);
    loadModel(ejb3Configuration);
    updateSchema(ejb3Configuration.getHibernateConfiguration());
}

private void updateSchema(Configuration cfg) {
    SchemaUpdate schemaUpdate = new SchemaUpdate(cfg);
    schemaUpdate.execute(true, true);
}

private void loadModel(Ejb3Configuration ejb3Configuration) {
    for (Object _object : objectList) {
        ejb3Configuration.addAnnotatedClass(_object.getClass());
    }

}
existingPU
通过使用persistence.xml等的正常JPA方式加载。更新
WEB-INF/classes
中实体的模式,该部分代码库工作正常。现在,
objectList
中的新类从
WEB-INF/classes
扩展了一个
@MappedSuperclass
,该类具有

@MappedSuperclass
public abstract class OwnerHolder implements Serializable {
    private User owner;
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "fk_owner_id")
    public User getOwner() {
         return owner;
    }

    public void setOwner(User owner) {
        this.owner= owner;
    }
}
这个类还通过WEB-INF/classes中的类进行扩展,代码运行良好。我得到的错误如下:

13:36:45,494 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] could not complete schema update: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.myproject.external.model.PurchaseOrder.owner references an unknown entity: com.myproject.model.User
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:107) [:3.6.0.Final]
at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1550) [:3.6.0.Final]
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1473) [:3.6.0.Final]
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1389) [:3.6.0.Final]
at org.hibernate.cfg.Configuration.generateSchemaUpdateScript(Configuration.java:1160) [:3.6.0.Final]
at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:187) [:3.6.0.Final]
at com.myproject.MyConfiguration.updateSchema(MyConfiguration.java:43) [:]
objectList
是放置在WEB-INF/lib中的jar文件中的类列表


你能帮我吗?

检查用户类的声明中是否有@Entity注释。

谢谢@peshkira。我已经检查了你提到的所有检查点。一切都很好。就注释而言,它们始终位于get属性上,包括中提到的
@Id
。同样如前所述,
WEB-INF/classes
中的模型代码工作正常。在
WEB-INF/classes
中,大约有20个类扩展了
OwnerHolder
,而且都很好。我的推论是:当我尝试向
现有pu
添加一个新的注释类时,旧的类没有进一步的进展:我在
loadModel(Ejb3Configuration)
中重新加载了所有实体,包括之前在启动时加载的实体,并且工作正常。这基本上意味着我加载的
Ejb3Configuration
中没有启动时加载的实体。知道为什么会这样吗?