2017-03-28 6 views
1

Ich habe eine Domänenklasse definiert, die "java.util.UUID" als ihr "Id" -Feld hat.Falscher Spaltentyp bei der Zuordnung von UUID als Feld zu einer MySQL-Datenbank

@Entity 
class Response{ 
@Id 
@GeneratedValue(generator = "myUUIDGenerator") 
@GenericGenerator(name = "myUUIDGenerator", strategy = "uuid2") 
@Column(columnDefinition = "uuid") 
private UUID id; 
... 
} 

Ich benutze Liquibase, um die Datenbank zu generieren.

<createTable tableName="response"> 
    <column name="id" type="uuid"> 
     <constraints primaryKey="true" nullable="false"/> 
    </column> 
</createTable> 

Die Tabelle in MySQL erzeugt beschreibt die erzeugte ID-Spalte als "char (36)".

Das Problem tritt beim Ausführen von Testfällen auf. Es sagt folgendes und keiner der Testfälle wird ausgeführt.

Wrong column type in DBNAME_response for column id. Found: char, expected: uuid 

Antwort

0

In Ihrem Response Klasse definieren Sie die id Feld als Typ UUID, aber MySQL haben keinen nativen UUID Typ, so erklärt es die Spalte als char(36). Sie müssen es möglicherweise ändern, so dass das Feld ein String ist, und dann Getter- und Setter-Methoden bereitstellen, die die Konvertierung String <-> UUID vornehmen.

0

als Update zu den neueren Bibliotheken, Mit JPA2.1 sollten Sie nicht SteveDonie der Weg gehen -

ein Attribut Converter erklären:

@Converter() 
public class UUIDAttributeConverter implements AttributeConverter<UUID, String>, Serializable { 

    @Override 
    public String convertToDatabaseColumn(UUID locDate) { 
     return (locDate == null ? null : locDate.toString()); 
    } 

    @Override 
    public UUID convertToEntityAttribute(String sqlDate) { 
     return (sqlDate == null ? null : UUID.fromString(sqlDate)); 
    } 

} 

Markieren Sie die Persistenzeinheit als der angelegten Wandler (wenn nicht AutoApply) in persistence.xml

<class>UUIDAttributeConverter</class> 

Nehmen, um Felder

@Id 
@Column(unique = true, nullable = false, length = 64) 
@Convert(converter = UUIDAttributeConverter.class) 
private UUID guid; 

Damit können Sie festlegen, dass die Konvertierung nur in bestimmten Persistenzeinheiten (wie zB Ihrer MySql) und nicht in anderen, die eingehalten werden sollen, stattfindet. Sie ordnet die Elemente auch korrekt zu db zu und hält den Objekttyp sicher.

Hoffe, das hilft!

Verwandte Themen