使用hibernate从数据库检索一组基元类型
我使用的是informix数据库,我有两个表;实例和联系人。联系人表具有以下字段;联系人id、fname和lname。实例表包含以下字段:实例id、名称和联系人id(联系人id是联系人id的informix集合,com.informix.jdbc)。IfxCollection@429681e8). 我使用hibernate进行数据持久化。my Instance类的代码如下所示:使用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_
@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>