2012-01-05 5 views
4

Derby의 JPA가 BLOB 크기를 64KB로 기본 설정하는 문제가 발생했습니다. columnDefinition = "BLOB (128M)"을 설정하여이 문제를 해결할 수 있습니다. 그러나 이것은 MS SQL과 같은 다른 RDBMS에 대한 통합 테스트 중에 실패합니다. 내가하고 싶은 것은 orm.xml을 사용하여 columnDefinition을 설정하는 것이다. 그러나, 나의 시도는 쓸모없고 이것이 작동하게 할 수 없다. 내가 예상 한대로 orm.xml에 설정된 값이 주석을 덮어 쓰는 것으로 나타나지 않습니다.orm.xml이 주석을 대체하지 않습니다.

JPA 1.0, Toplink Essentials 2.1.60을 사용하고 있습니다.

I는 다음의 엔티티와 같은 주석 가지고

package foo; 

@Entity 
@Table(name = "Attachment") 
public class Attachment implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 
    @Version 
    @Column(name = "VERSION") 
    private Integer version; 
    @Column(name = "FILE_NAME", nullable = false) 
    private String name; 
    @Lob 
    @Basic 
    @Column(name = "ATTACHED_FILE", nullable = false) 
    private byte[] file; 
} 

의 persistence.xml (META-INF에 위치)

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
    <persistence-unit name="LAS-OOC" transaction-type="RESOURCE_LOCAL"> 
     <provider>${jpa.provider}</provider> 
     <!-- this isn't required, i know, but I'm trying everything I can think of --> 
     <mapping-file>META-INF/orm.xml</mapping-file> 
     <class>foo.Attachment</class> 
     <properties> 
     ... 
     </properties> 
    </persistence-unit> 
</persistence> 

orm.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm 
     http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" version="1.0"> 

    <persistence-unit-metadata> 
     <persistence-unit-defaults> 
      <schema>TEST</schema> 
     </persistence-unit-defaults> 
    </persistence-unit-metadata> 

    <entity class="foo.Attachment" access="FIELD" > 
     <attributes> 
      <basic name="file"> 
       <!-- 
        I'm using maven profiles to set the 'jpa.blob.definition' property. I even tried changing the column name. 
       --> 
       <column nullable="true" name="ATTACHED_FILE_MODIFIED" column-definition="${jpa.blob.definition}" /> 
      </basic> 
     </attributes> 
    </entity> 
</entity-mappings> 

이 흥미 롭다 orm.xml에서 엔터티 클래스 또는 기본 이름 특성을 변경하면 해당 개체가 잘못되었거나 찾을 수 없다는 오류가 발생합니다. 그래서 그것은 그것을 읽고 있지만 그것은 에 지정된 주석보다 우선하지 않습니다. 기본 스키마도 사용되지 않습니다.

orm.xml이 주석을 대체한다고 가정하지 않습니까? 단순하지 않아야합니까?

+0

우리가 적극적으로 사람들에게 그렇게하도록 권장하기 때문에 DataNucleus JPA를 사용하여 그러한 정보를 무시할 수 있습니다. 아마도 TopLink의 버그입니까? – DataNucleus

답변

2

내 문제를 파악했습니다. 필자는 프로젝트가 테스트/리소스의 persistence.xml에 정의 된 동일한 지속성 유닛 이름을 가지고 있다는 것을 알지 못했습니다. 그래서 내가 persistence.xml 파일에

<mapping-file>META-INF/orm.xml</mapping-file> 

을 추가했을 때 작동했습니다. 그렇습니다. 자동 링크를 자동으로 선택해야하지만 그렇지 않은 경우에는 상단 링크가있는 버그가있는 것으로 보입니다. 나는 이전에 그것을 보지 못했다고 나는 믿을 수 없다. 한숨 ...

관련 문제