2012-03-28 13 views
1

私は、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に移動する間に問題を引き起こした可能性がありますか?

+0

eu.ist_phosphorus.harmony.idb.database.hibernate.Domain.endpointsのアノテーションを投稿できますか? – Rick

+0

こんにちは。エンドポイントのマッピングを追加しました。 – santiagozky

+0

Endpoint.domainも投稿できますか? – Rick

答えて

0

@MapKeyを削除してみます。私はこの文脈でそれを使うのは間違っていると思います。

@MapKey注釈タイプの関連付けのための地図キーを指定するために使用されているjava.util.Map マップのキーは、それ自体の値であり、主キーまたは永続フィールドまたはエンティティのプロパティである場合地図。

関連する問題