Ошибка спящего режима: не удалось определить тип для: com.mysql.jdbc.Blob - PullRequest
0 голосов
/ 16 февраля 2011

Я работаю над проектом с Hibernate и MySQL.В одном из моих объектов модели я объявил свойство «изображение», тип которого - Blob, и использовал com.mysql.jdbc.Blob.Но когда я запустил эту программу, произошла ошибка: org.hibernate.MappingException: не удалось определить тип для: com.mysql.jdbc.Blob, в таблице: SPOT, для столбцов: [org.hibernate.mapping.Column (image)].Вот исходный код модели данных:

    @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;
}
}

А вот соответствующий DDL таблицы SPOT:

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?Большое вам спасибо.

1 Ответ

0 голосов
/ 16 февраля 2011

Я бы сказал, что неправильно полагаться на детали реализации драйвера JDBC. Я бы пересмотрел вашу зависимость и попытался бы сделать ее мягкой. Если вам действительно необходимо сохранить эту жесткую зависимость, вам необходимо реализовать UserType, способный обрабатывать com.mysql.jdbc.Blob. Я не знаю подробностей об этой реализации, но вы можете расширить BlobType Hibernate как MySQLBlobType и аннотировать свойство модели с помощью аннотации @Type, указав MySQLBlobType:

https://github.com/hibernate/hibernate-core/blob/master/hibernate-core/src/main/java/org/hibernate/type/BlobType.java

https://github.com/hibernate/hibernate-core/blob/master/hibernate-core/src/test/java/org/hibernate/test/annotations/type/Dvd.java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...