2012-02-09 4 views
0

informix 데이터베이스를 사용하고 있는데 두 개의 테이블이 있습니다. 인스턴스 및 연락처. 연락처 테이블에는 다음 필드가 있습니다. contact_id, fname 및 lname. 인스턴스 테이블에는 instance_id, name 및 contact_ids 필드가 있습니다 (contact_ids는 informix 세트 연락처 ID 집합, [email protected]). 데이터 지속성을 위해 최대 절전 모드를 사용합니다. 나는 다음과 같은 오류가 인스턴스 엔티티를로드 할 때최대 절전 모드를 사용하여 데이터베이스에서 기본 유형 집합 검색

@Entity 

public class Contact{ 

@Id 
private int contact_id; 

private String fname; 

private String lname; 

    .... 

    setters and getters 
} 

: 내 인스턴스 클래스에 대한 코드는 다음과 같습니다

@Entity 

public class Instance{ 

@Id 
private int instance_id; 

private String name; 

@Lob 
private Set<Integer> contact_ids 
    .... 
    setters and getters 

} 

연락 클래스

20:32:18,527 ERROR [jsp:154] java.sql.SQLException: **Can't convert to: binary stream** 
    at com.informix.util.IfxErrMsg.getSQLMinorException(IfxErrMsg.java:575) 
    at com.informix.jdbc.IfxObject.toBlob(IfxObject.java:647) 
    at com.informix.jdbc.IfxResultSet.getBlob(IfxResultSet.java:3338) 
    at com.informix.jdbc.IfxResultSet.getBlob(IfxResultSet.java:3437) 

단순히 원하는 세트를 가져옵니다. 대신 contactID는 필드의,

@ElementCollection 
    @CollectionTable(name="contact_ids", [email protected](name="instance_id")) 
    @Column(name="contact_id") 
    public Set<Integer> contactIds; 

그러나, 시나리오, 나는 실제 엔티티 사이에 자신을 OneToMany 관계를 추천 할 것입니다 인스턴스 클래스, 그래서 :

답변

0

다음과 같이 @ElementCollection 주석을 사용해보십시오

@OneToMany(fetch = FetchType.LAZY, mappedBy = "instance", cascade = {...}) 
    public Set<Contact> contacts; 

을하고 연락 클래스에서 당신은 또한 가질 수있다 (위의 일치) : 당신은 할 것

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "instance_id", referencedColumnName = "instance_id", nullable = false) 
public Instance instance; 
,
+0

솔루션을 제공해 주셔서 감사합니다. 첫 번째 옵션을 시도했지만 다음과 같은 오류가 있습니다 : –

+0

첫 번째 옵션을 시도했지만 다음과 같은 오류가있었습니다. 원인 : java.sql.SQLException : 지정한 테이블 (contact_ids)이 데이터베이스에 없습니다. 인스턴스와 연락처 테이블간에 직접적인 관계는 없습니다. 유일한 관계는 인스턴스 테이블에 연락처 ID 모음이 있다는 것입니다. 연락처 테이블에 인스턴스 ID가 없습니다. 기존 데이터베이스에서 작업하고 있는데 테이블 구조를 변경하고 싶지 않습니다. contact_ids 필드는 콜렉션이므로 날짜 또는 문자열을 검색하는 것과 같은 연관성을 만들지 않고 콜렉션을 검색 할 수있는 방법이 있으므로 생각하고있었습니다. –

+0

어, 나는 데이터베이스 구조가 고정되어 있고 당신이 그것을 바꾸고 싶지 않다는 것을 알지 못했습니다. 이 경우 어느 솔루션도 즉시 작동하지 않습니다. –

0
당신이 당신의 인포믹스 typeHandeler 사용자 정의해야

: 당신은 MyBatis로를 사용하는 가정

추가 :

<typeHandlers> 
    <typeHandler javaType="string" jdbcType="BLOB" handler="org.apache.ibatis.type.StringTypeHandler"/> 
</typeHandlers> 

귀하의 MyBatis-config.xml 파일에서

힌트 : "만약 javaType은"당신의 희망을해야한다 유형

관련 문제