簡體   English   中英

使用 Hibernate 時,findByUuid() 在 MySQL-DB 中不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM