Среда: JPA 2.0, Hibernate 3.6, в файле war (с jsf 2.0, на jboss 6 и т. д.).
Я хочу обновить схему, добавив классы Annotated в существующий модуль Persistence в 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
загружается обычным способом JPA с использованием persistence.xml и т. д. Схема обновляется для сущностей в WEB-INF/classes
, и эта часть базы кода работает отлично. Теперь новые классы в objectList
расширяют @MappedSuperclass
из WEB-INF/classes
, который имеет
@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
— это список классов из файла jar, размещенного в WEB-INF/lib.
Не могли бы вы мне помочь?
loadModel(Ejb3Configuration)
и все работает нормально. что в основном означает, чтоEjb3Configuration
, который я загрузил, не содержит объектов, которые были загружены при запуске. Любая идея, почему это произойдет? - person Bhuvanesh Phadnis   schedule 27.06.2011