2012-02-10 3 views
1

을 찾지 못하는 내가 가지고있는 다음과 같은 클래스 :JPA의 XML 매핑 필드

package lt.vic.valdos.domain.valda; 

public class Valda implements java.io.Serializable { 
    private long id; 
    private Long valdosKodas; 

    public long getId() { 
     return id; 
    } 

    public Long getValdosKodas() { 
     return valdosKodas; 
    } 
} 

다음과 같은 orm.xml :

<?xml version="1.0"?> 
<entity-mappings 
     xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/orm http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_1.xsd" 
     version="2.1"> 
    <entity class="lt.vic.valdos.domain.valda.Valda"> 
     <table name="VALDOS" schema="VLD" /> 
     <attributes> 
      <id name="id" /> 
      <basic name="id"> 
       <column name="vld_id" /> 
       <return-insert return-only="true" /> 
      </basic> 
      <basic name="valdosKodas"> 
       <column name="valdos_kodas" /> 
      </basic> 
     </attributes> 
    </entity> 
</entity-mappings> 

내가 글래스 피쉬이를 배포 할 때, 나는 다음과 같은 오류가 발생합니다 :

Exception [EclipseLink-7215] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.ValidationException 
Exception Description: Could not load the field named [id] on the class [class lt.vic.valdos.domain.valda.Valda]. Ensure there is a corresponding field with that name defined on the class. 

클래스가 메일 응용 프로그램에 종속성 종속성으로 포함 된 jar 파일입니다. orm.xml은 웹 애플리케이션의/WEB-INF/classes/META-INF에 있습니다.

내가 뭘 잘못하고 있니?

답변

1

나 자신을 알아 냈습니다. 어떤 이유로 EclipseLink는 클래스에 setter가 필요합니다. 개인 설정 도구를 추가하면 모든 것이 잘된 것처럼 보입니다. setter가 필요한 이유 (매핑 접근자는 FIELD로 기본 설정되어야 함)는 여전히 수수께끼이지만 여전히 중요하지 않습니다. 모든 엔티티 속성에 access = "FIELD"를 추가하면 설정자없이 문제가 해결됩니다.

0

내가 대신 추가 기본 요소를 사용하여 ID 요소에 id 컬럼에 대한 열 설명을 추가해야합니다 생각합니다. <id name="id"> <column name="vld_id" /> ... </id>에서와 같이, 추가 <basic name="id"> ...없이.

내 경험에 비추어 볼 때 주석을 사용하여 맵핑을 정의하는 것이 더 쉽습니다. 신원 전략을 사용하여 생성 된

+0

나는 태그를 안에 추가하려고 시도했습니다. 그러나 안에 배치 할 수없는 eclipselink의 태그 (기본 키 트리거가있는 이전 DB 디자인)가 필요하기 때문에 을 제거 할 수 없습니다. 나는 여전히 모두 같은 결과를 얻고 있습니다. 내가 어노테이션을 사용하면 어노테이션 접근이 더 쉽고 모든 것이 작동한다는 것을 알고있다. 하지만 내 도메인 항아리에서 JPA에 대한 의존성을 좋아하지 않습니다. –

+0

테스트 용으로 만 기본 패키지를 제거한 경우 예외가 사라지나요? – Chris

+0

id 필드에 대해 을 제거하더라도 예외가 유지됩니다. –

1

당신은 ID를 지정해야합니다

<id name="id"> 
    <column name="vld_id"/> 
    <generated-value strategy="IDENTITY"/> 
</id> 

이 전략은 자동으로 새로운 개체로 다시 데이터베이스 제공하는 ID를 읽을 성공적으로 커밋에. id가 이미 Identity ID 생성에 포함되어 있기 때문에 EclipseLink return 문 기능은 기본 매핑에만 적용 가능합니다.

+0

이 전략은 데이터베이스가 ID 테이블을 기반으로 기본 키를 생성하는 경우에만 작동합니다. 그러나 필자의 경우 기본 데이터베이스는 Oracle입니다.이 데이터베이스는 시퀀스에 기본 키를 생성합니다. 당신을 위해 sequence.nextval을 수행하는 DBA에 의해 설정된 on-insert 트리거가 있습니다. 나는 시퀀스 기반의 전략이 있다는 것을 잘 알고 있지만, 유일한 옵션으로 리턴 - 인서트를 남기는 시퀀스 (멍청한 DBA 정책)에 대한 선택 권한이 없다. –