Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate错误:无法确定:com.mysql.jdbc.Blob的类型_Mysql_Hibernate_Hibernate Mapping - Fatal编程技术网

Hibernate错误:无法确定:com.mysql.jdbc.Blob的类型

Hibernate错误:无法确定:com.mysql.jdbc.Blob的类型,mysql,hibernate,hibernate-mapping,Mysql,Hibernate,Hibernate Mapping,我正在用Hibernate和MySQL做一个项目。在我的一个模型对象中,我声明了一个类型为Blob的属性映像,并使用com.mysql.jdbc.Blob。但当我运行该程序时,出现了一个错误:org.hibernate.MappingException:无法确定列:[org.hibernate.mapping.Columnimage]的类型:com.mysql.jdbc.Blob,位于表:SPOT。 以下是数据模型的源代码: @Entity @Inheritance(strategy =

我正在用Hibernate和MySQL做一个项目。在我的一个模型对象中,我声明了一个类型为Blob的属性映像,并使用com.mysql.jdbc.Blob。但当我运行该程序时,出现了一个错误:org.hibernate.MappingException:无法确定列:[org.hibernate.mapping.Columnimage]的类型:com.mysql.jdbc.Blob,位于表:SPOT。 以下是数据模型的源代码:

    @Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "SPOT", catalog = "ar", uniqueConstraints = @UniqueConstraint(columnNames = "name"))
@XmlRootElement(name = "spot")
public class Spot extends BaseIdObject {
    private Double axisX;
    private Double axisY;
    private String address;
    private String spotType;
    private String description;
    private String phoneNumber;
    private String website;
    private Blob image;

    @Column(name = "axis_x", precision = 22, scale = 0)
    @NotNull
    public Double getAxisX() {
        return this.axisX;
    }

    public void setAxisX(Double axisX) {
        this.axisX = axisX;
    }

    @Column(name = "axis_y", precision = 22, scale = 0)
    @NotNull
    public Double getAxisY() {
        return this.axisY;
    }

    public void setAxisY(Double axisY) {
        this.axisY = axisY;
    }

    @Column(name = "address", length = 200)
    @NotNull
    public String getAddress() {
        return this.address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Column(name = "spot_type", length = 50)
    @NotNull
    public String getSpotType() {
        return this.spotType;
    }

    public void setSpotType(String spotType) {
        this.spotType = spotType;
    }

    @Column(name = "description", length = 2000)
    public String getDescription() {
        return this.description;
}

public void setDescription(String description) {
    this.description = description;
}

@Column(name = "phone_number", length = 30)
public String getPhoneNumber() {
    return this.phoneNumber;
}

public void setPhoneNumber(String phoneNumber) {
    this.phoneNumber = phoneNumber;
}
}
下面是表SPOT对应的DDL:

DROP TABLE IF EXISTS `spot`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `spot` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `NAME` varchar(200) DEFAULT NULL,
  `AXIS_X` double NOT NULL,
  `AXIS_Y` double NOT NULL,
  `ADDRESS` varchar(200) DEFAULT NULL,
  `SPOT_TYPE` varchar(50) NOT NULL,
  `DESCRIPTION` varchar(2000) DEFAULT NULL,
  `PHONE_NUMBER` varchar(30) DEFAULT NULL,
  `WEBSITE` varchar(200) DEFAULT NULL,
  `IMAGE` blob,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `SPOT_ID_UNIQUE` (`ID`),
  UNIQUE KEY `SPOT_NAME_UNIQUE` (`NAME`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

我在互联网上搜索,找到了一个使用java.sql.Blob的建议。但当我更改为该类型时,发生了另一个错误,因为在我的程序中,我对该模型对象使用XML进行了一些处理,因此它无法处理java.sql.Blob接口。那么,我要做什么才能保持数据类型com.mysql.jdbc.Blob和程序在Hibernate中正常运行呢?非常感谢。

我认为依赖JDBC驱动程序的实现细节是不对的。我会检查你的依赖关系,并尝试使它成为一个软依赖关系。如果您确实需要保持这种硬依赖性,那么您需要实现一个能够处理com.mysql.jdbc.Blob的用户类型。我不知道此实现的详细信息,但您可以将Hibernate的BlobType扩展为MySQLBlobType,并使用@Type annotation注释您的模型属性,指定此MySQLBlobType: