我已经在MSSQL中以二进制格式存储了图像数据类型的图像。现在我已将我的数据库从MSSQL迁移到Postgres 9.0并尝试将图像文件存储在bytea字段中。当我尝试将这些字节转换为图像文件时我没有得到任何错误,但Image没有得到渲染,因为相同的Java代码与MSSQL正常工作。我的应用程序是struts基于hibernate的application.My hibernate dto就像下面 -
@Entity
@Table(name="Image_Type")
public class ImageType extends AbstractPO
{
private static final long serialVersionUID = 1L;
private Long id;
private Long ownerId;
private Short ownerType;
private String name;
private String description;
private Long typeId;
private byte[] originalImage;
private byte[] thumbNailImage;
private byte[] terminalImage;
private String createdBy;
private Date createdOn;
private String modifiedBy;
private Date modifiedOn;
private String rfu1;
private String rfu2;
private String rfu3;
@Id @GeneratedValue(strategy=AUTO, generator="Image_Type_seq")
@SequenceGenerator(name="Image_Type_seq", sequenceName="IMAGE_TYPE_IMAGE_TYPEID_SEQ")
@Column(name="Image_TypeID", unique=true, nullable=false, precision=10, scale=0)
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name="OwnerID", precision=10, scale=0)
public Long getOwnerId() {
return this.ownerId;
}
public void setOwnerId(Long ownerId) {
this.ownerId = ownerId;
}
@Column(name="OwnerType", precision=4, scale=0)
public Short getOwnerType() {
return this.ownerType;
}
public void setOwnerType(Short ownerType) {
this.ownerType = ownerType;
}
@Column(name="Name", length=100)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="Description", length=100)
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
@Column(name="TypeID", precision=10, scale=0)
public Long getTypeId() {
return this.typeId;
}
public void setTypeId(Long typeId) {
this.typeId = typeId;
}
@Column(name="Original_Image")
public byte[] getOriginalImage() {
return this.originalImage;
}
public void setOriginalImage(byte[] originalImage) {
this.originalImage = originalImage;
}
@Column(name="ThumbNail_Image")
public byte[] getThumbNailImage() {
return this.thumbNailImage;
}
public void setThumbNailImage(byte[] thumbNailImage) {
this.thumbNailImage = thumbNailImage;
}
@Column(name="Terminal_Image")
public byte[] getTerminalImage() {
return this.terminalImage;
}
public void setTerminalImage(byte[] terminalImage) {
this.terminalImage = terminalImage;
}
@Column(name="CreatedBy", length=50)
public String getCreatedBy() {
return this.createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
@Column(name="CreatedOn", nullable=false, length=23)
public Date getCreatedOn() {
return this.createdOn;
}
public void setCreatedOn(Date createdOn) {
this.createdOn = createdOn;
}
@Column(name="ModifiedBy", length=50)
public String getModifiedBy() {
return this.modifiedBy;
}
public void setModifiedBy(String modifiedBy) {
this.modifiedBy = modifiedBy;
}
@Column(name="ModifiedOn", length=23)
public Date getModifiedOn() {
return this.modifiedOn;
}
public void setModifiedOn(Date modifiedOn) {
this.modifiedOn = modifiedOn;
}
@Column(name="RFU1", length=100)
public String getRfu1() {
return this.rfu1;
}
public void setRfu1(String rfu1) {
this.rfu1 = rfu1;
}
@Column(name="RFU2", length=100)
public String getRfu2() {
return this.rfu2;
}
public void setRfu2(String rfu2) {
this.rfu2 = rfu2;
}
@Column(name="RFU3", length=100)
public String getRfu3() {
return this.rfu3;
}
public void setRfu3(String rfu3) {
this.rfu3 = rfu3;
}
}
请帮我解决此问题
答案 0 :(得分:2)
您使用的是哪个版本的Postgresql?您使用的是服务器版本9和JDBC驱动程序8.4吗? (因为如果是这样的话:Hibernate 3.3.2GA improperly loads bytea data from PostgreSQL 9.0 and all type mappings are correct)
数据库中存储的实际值是多少?使用psql检查,并将前16个字节左右与预期值进行比较。由于它们是图像,您可以期望它们以某种格式魔术开始 - “JFIF”,“GIF”,“PNG”,“II”/“MM”等。您需要能够确定数据是否在被破坏时被保存,被加载时损坏或其他一些问题。在保存对象之前转储图像数组的前几个字节,并在加载后转换为与psql中的值进行比较。