Как обновить схему, добавив аннотированные классы в существующий модуль сохраняемости в JPA с помощью hibernate? - PullRequest
0 голосов
/ 26 июня 2011

Среда: 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.

Не могли бы вы мне помочь?

1 Ответ

0 голосов
/ 26 июня 2011

Проверьте, имеет ли класс User аннотацию @Entity в своем объявлении.

...