[英]findByUuid() doesn't work in MySQL-DB when using Hibernate
我正在開發一個 Spring REST 服務(使用 Spring Data JPA),我的實體包含 java.util.UUID 類型的屬性。 我正在使用MySQL作為導致問題的數據庫。 到目前為止一切正常,除了存儲庫方法,其中 UUID 是查詢的一部分,例如: entityRepository.findByUuid(UUID uuid);
默認情況下,數據存儲在二進制 (255) 列中。 從存儲庫中獲取 UUID 工作正常,唯一的問題是在查詢中使用 UUID,例如在 findByUuid() 中。 它總是告訴我它在數據庫中找不到特定的 UUID。 MariaDB 也會出現同樣的問題。
我的服務與 H2-Database 一起正常工作。 知道為什么 MySQL(和 MariaDB)有這個問題嗎?
數據庫配置:
spring.datasource.url=jdbc:mysql://localhost/abc123
spring.datasource.username=alfkmakfaf
spring.datasource.password=aafkmafmlaf
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.database=mysql
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
實體中的 UUID
@Entity
public class Thema {
// without any annotations, works fine with H2 Database
private UUID uuid;
...
如果我在模型中添加此附加符號(將二進制更改為字符串列)開始工作,我會遇到二進制 UUID(默認列為二進制類型)的問題
@Type(type="org.hibernate.type.UUIDCharType")
我發現最簡單的事情就是將 UUID 轉換為字符串以插入數據庫。 毫無疑問,在數據庫中占用了更多空間,但我找不到其他有效的方法。
為了避免必須在每個 UUID 字段上放置@Convert
,請通過@Converter(autoApply = true)
注冊一個全局屬性轉換器
@Converter(autoApply = true)
public class UUIDConverter implements AttributeConverter<UUID, String> {
@Override
public String convertToDatabaseColumn(UUID uuid) {
return uuid.toString();
}
@Override
public UUID convertToEntityAttribute(String s) {
return UUID.fromString(s);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.