使用hibernate从数据库检索一组基元类型

使用hibernate从数据库检索一组基元类型,hibernate,set,lob,Hibernate,Set,Lob,我使用的是informix数据库,我有两个表;实例和联系人。联系人表具有以下字段;联系人id、fname和lname。实例表包含以下字段:实例id、名称和联系人id(联系人id是联系人id的informix集合,com.informix.jdbc)。IfxCollection@429681e8). 我使用hibernate进行数据持久化。my Instance类的代码如下所示: @Entity public class Instance{ @Id private int instance_

我使用的是informix数据库,我有两个表;实例和联系人。联系人表具有以下字段;联系人id、fname和lname。实例表包含以下字段:实例id、名称和联系人id(联系人id是联系人id的informix集合,com.informix.jdbc)。IfxCollection@429681e8). 我使用hibernate进行数据持久化。my Instance类的代码如下所示:

@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)

我只想检索集合

尝试使用@ElementCollection注释,如下所示:

   @ElementCollection
   @CollectionTable(name="contact_ids", joinColumns=@JoinColumn(name="instance_id"))
   @Column(name="contact_id")
   public Set<Integer> contactIds;

您需要自定义Informix TypeHandler:

假设您正在使用myBatis添加:

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

在mybatis-config.xml文件中


提示:“javaType”应该是您想要的类型

谢谢您的解决方案。我尝试了第一个选项,但出现如下错误:我尝试了第一个选项,但出现如下错误:原因:java.sql.SQLException:指定的表(contact_id)不在数据库中。实例表和联系人表之间没有直接关系。唯一存在的关系是实例表具有联系人ID的集合。联系人表没有实例id。我正在处理现有数据库,不想更改表结构。我在想,因为contact_id字段是一个集合,所以有一种方法可以在不创建任何关联的情况下检索集合,就像检索日期或字符串一样。嗯,我没有意识到数据库结构是固定的,您不想更改它。在这种情况下,两种解决方案都不会立即起作用。
    @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;
<typeHandlers>
    <typeHandler javaType="string" jdbcType="BLOB" handler="org.apache.ibatis.type.StringTypeHandler"/>
</typeHandlers>