2012-02-09 72 views
0

我正在使用informix數據庫,我有兩個表;實例和聯繫人。聯繫人表格具有以下字段; contact_id,fname和lname。實例表包含以下字段:instance_id,name和contact_ids(contact_ids是informix設置的聯繫人ID集合,[email protected])。 我使用hibernate進行數據持久化。我的實例類的代碼如下所示:使用休眠從數據庫中檢索一組基本類型

@Entity 

public class Instance{ 

@Id 
private int instance_id; 

private String name; 

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

} 

聯繫類別:

@Entity 

public class Contact{ 

@Id 
private int contact_id; 

private String fname; 

private String lname; 

    .... 

    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) 

我只是想檢索集合。

回答

0

嘗試使用@ElementCollection註解如下:

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

但是,對於你的情況,我會建議實際實體之間的一對多關係自己,所以在你的實例類,而不是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

謝謝你的解決方案。我嘗試了第一個選項,但有一個錯誤,如下所示: – 2012-02-09 22:26:00

+0

我嘗試了第一個選項,但有一個錯誤,如下所示:java.sql.SQLException:指定的表(contact_ids)不在數據庫中。 實例和聯繫人表之間沒有直接關係。存在的唯一關係是該實例表具有一組聯繫ID。聯繫人表沒有實例ID。我正在處理現有的數據庫,我不想更改表結構。我在想,因爲contact_ids字段是一個集合,所以有一種檢索集合的方式,不需要像檢索日期或字符串一樣創建任何關聯。 – 2012-02-09 22:37:17

+0

呃,我沒有意識到數據庫結構是固定的,你不想改變它。在這種情況下,兩種解決方案都不會立即奏效 – 2012-02-09 23:07:02

0

您需要自定義您的Informix typeHandeler:

假設你使用MyBatis的補充:

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

在你的MyBatis-config.xml文件

提示: 「java類型」 應該是你想要的鍵入