私は、hibernateを使用したプロジェクトで作業しています。openjpaに切り替えるのは私の仕事です(既にopenjpaを使用している別の大きなプロジェクトに統合されるためです)。hibernateからopenjpaへの移動:
私のテストを実行するときに、今、私が言ってエラーになっています:
eu.ist_phosphorus.harmony.idb.exceptions.database.DatabaseException: Errors encountered while resolving metadata. See nested exceptions for details.
...
...
at eu.ist_phosphorus.harmony.idb.database.hibernate.Domain.save(Domain.java:878)
at
eu.ist_phosphorus.harmony.idb.database.hibernate.Domain$4.dbOperation(Domain.java:885)
at
eu.ist_phosphorus.harmony.idb.database.TransactionManager.start(TransactionManager.java:108)
... 30 more
...
Caused by: <openjpa-2.2.0-r422266:1244990 fatal user error> org.apache.openjpa.persistence.ArgumentException: Errors encountered while resolving metadata. See nested exceptions for details.
FailedObject: [email protected] [java.lang.String]
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:668)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:411)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:384)
at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:248)
at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:105)
at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3474)
at org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1214)
at org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:878)
at eu.ist_phosphorus.harmony.idb.database.hibernate.Domain.save(Domain.java:878)
at eu.ist_phosphorus.harmony.idb.database.hibernate.Domain$4.dbOperation(Domain.java:885)
at eu.ist_phosphorus.harmony.idb.database.TransactionManager.start(TransactionManager.java:108)
... 30 more
Caused by: <openjpa-2.2.0-r422266:1244990 fatal user error> org.apache.openjpa.persistence.ArgumentException: "eu.ist_phosphorus.harmony.idb.database.hibernate.Domain.endpoints<key:class java.lang.Object>" declared that it is mapped by "TNA", but that is a not a field of the related type.
at org.apache.openjpa.meta.ValueMetaDataImpl.getValueMappedByMetaData(ValueMetaDataImpl.java:329)
at org.apache.openjpa.jdbc.meta.ValueMappingImpl.getValueMappedByMapping(ValueMappingImpl.java:121)
at org.apache.openjpa.jdbc.meta.ValueMappingImpl.getColumns(ValueMappingImpl.java:130)
at org.apache.openjpa.jdbc.meta.ValueMappingImpl.resolveMapping(ValueMappingImpl.java:518)
at org.apache.openjpa.jdbc.meta.ValueMappingImpl.resolve(ValueMappingImpl.java:500)
at org.apache.openjpa.jdbc.meta.FieldMapping.resolveMapping(FieldMapping.java:522)
at org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:461)
at org.apache.openjpa.jdbc.meta.ClassMapping.resolveMapping(ClassMapping.java:854)
at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1802)
at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:822)
at org.apache.openjpa.meta.MetaDataRepository.resolveMapping(MetaDataRepository.java:777)
at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:657)
... 40 more
エラーが以前SessionManager.saverOrUpdate(だったEntityManager.merge())によってトリガされているが。私はこれらのメソッドが少し違うことを知っていますが、エラーによってそれは永続的な問題ではないようですが、その前に何かがあります。
hibernateからopenjpaに移動するときにエンティティに触れなかったので、@Proxy(lazy = false)アノテーションを削除し、API呼び出しの条件を変更しました。
マッピング片側:
@Id
public String getTNA() {
return this.TNA;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "fkDomainName")
public Domain getDomain() {
return this.domain;
}
と反対側のマッピング:
Iは、(持続のために()entityManager.mergeを変更有するupdate-@OneToMany(mappedBy = "domain", fetch = FetchType.LAZY, cascade = { javax.persistence.CascadeType.REMOVE })
@MapKey(name = "TNA")
public Set<Endpoint> getEndpoints() {
return this.endpoints;
}
)まだI同じ問題がある
私はまた、セットがないことに気付きました。これはopenjpaに移動する間に問題を引き起こした可能性がありますか?
eu.ist_phosphorus.harmony.idb.database.hibernate.Domain.endpointsのアノテーションを投稿できますか? – Rick
こんにちは。エンドポイントのマッピングを追加しました。 – santiagozky
Endpoint.domainも投稿できますか? – Rick