2017-07-17 2 views
1

Ich entwickle einen Spring-REST-Service (mit Spring Data JPA) und meine Entität enthält Eigenschaften des Typs java.util.UUID. Ich verwende MySQL als eine Datenbank, die Probleme verursacht. Bis auf Repository-Methoden, bei denen eine UUID Teil einer Abfrage ist, funktioniert alles einwandfrei, z. B .: entityRepository.findByUuid(UUID uuid);findByUuid() funktioniert nicht in MySQL-DB bei Verwendung von Hibernate

Die Daten werden standardmäßig in einer binären (255) -Spalte gespeichert. Holen Sie die UUID aus dem Repository funktioniert gut, das einzige Problem ist die Verwendung einer UUID in Abfragen, wie in findByUuid(). Es sagt mir immer, dass es eine bestimmte UUID in der Datenbank nicht finden kann. Das gleiche Problem tritt bei MariaDB auf.

Mein Dienst funktioniert ordnungsgemäß mit H2-Datenbank. Irgendeine Idee, warum MySQL (und MariaDB) dieses Problem hat?

DB-Config:

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 in Entitys

@Entity 
public class Thema { 
    // without any annotations, works fine with H2 Database 
    private UUID uuid; 
... 
+0

Sie müssen die Protokolldatei und untersuchen das Problem in SQL-Abfrage sehen, die von PPV verwendet wird. Versuchen Sie, die extrahierte Abfrage direkt im DB-Client auszuführen. –

+0

haben Sie diese [post] verwiesen (https://stackoverflow.com/questions/18350154/findbyuuid-using-spring-datas-jpa-repository). Möglicherweise wird es hilfreich sein. –

Antwort

0

habe ich die einfachste Sache gefunden zu tun, nur UUID in einen String umwandeln in db einzufügen. Kein Zweifel, nimmt mehr Platz in db, aber ich kann nichts anderes finden, das funktioniert.

Um zu vermeiden, auf jedem UUID Feld stellen @Convert mit, registrieren Sie einen globalen Attribut-Wandler von @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); 
    } 
} 
Verwandte Themen