0

我正在使用一个 informix 数据库,我有两个表;实例和联系方式。联系人表有以下字段;contact_id、fname 和 lname。实例表有以下字段,instance_id、name和contact_ids(contact_ids是一个informix set的contact id集合,com.informix.jdbc.IfxCollection@429681e8)。我使用休眠进行数据持久性。我的实例类的代码如下所示:

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

我只是想检索集合。

4

2 回答 2

0

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

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

但是,对于您的场景,我建议在实际实体本身之间建立 OneToMany 关系,因此在您的实例类中,您将拥有:

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

在您的 Contact 课程中,您还可以拥有(以匹配上述内容):

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "instance_id", referencedColumnName = "instance_id", nullable = false)
public Instance instance;
于 2012-02-09T21:02:54.547 回答
0

您需要自定义 Informix 类型处理程序:

假设您正在使用 myBatis 添加:

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

在你的 mybatis-config.xml 文件中

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

于 2017-08-03T09:31:43.837 回答