Среда: JPA 2.0, Hibernate 3.6, в файле war (с jsf 2.0, на jboss 6 и т. Д.).
Я хочу обновить схему, добавив аннотированные классы в существующую единицу постоянства в JPA с помощью hibernate. вот что я пытался сделать:
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.
Не могли бы вы мне помочь?