2012-02-09 9 views
0

私はinformixデータベースを使用していますが、私は2つのテーブルを持っています。インスタンスと連絡先。連絡先表には次のフィールドがあります。 contact_id、fnameおよびlname。インスタンステーブルには、instance_id、name、およびcontact_idsの各フィールドがあります(contact_idsはinformixで設定された連絡先IDの集合[email protected]です)。 データの永続化のためにhibernateを使用します。私は次のエラーを取得するインスタンスエンティティをロードするとhibernateを使用してデータベースからプリミティブ型のセットを取得する

@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 

} 

Contactクラス

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) 

私は単純にしたいですセットを取得します。

答えて

0

は次のように@ElementCollectionアノテーションを使用してみてください:

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

しかし、あなたのシナリオのために、私は実際のエンティティ自身とのOneToManyの関係をお勧めしますので、あなたのインスタンスクラスでは、代わりにcontactIdsフィールドの、

@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
あなたがあなたのInformix typeHandelerをカスタマイズする必要があり

あなたはMyBatisの追加使用していると仮定すると:

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

あなたMyBatisの-config.xmlファイルで

ヒント: "のJavaTypeは" あなたの希望する必要がありますタイプ

関連する問題