2017-03-28 15 views
1

"Id"フィールドとして "java.util.UUID"を持つドメインクラスを定義しました。mysqlデータベースへのフィールドとしてのUUIDのマッピングで間違ったカラムタイプ

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

私はデータベースを生成するためにliquibaseを使用しています。

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

MySQLで生成されたテーブルは、生成されたidカラムを「char(36)」と記述します。

問題はテストケースの実行中に発生します。それは以下のことであり、テストケースは実行されていないと言います。あなたのResponseクラスで

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

答えて

0

あなたはタイプUUIDとしてidフィールドを定義しているが、MySQLはネイティブUUIDタイプを持っていないので、それはchar(36)として列を宣言します。フィールドがStringになるように変更してから、String <-> UUIDの変換を行うゲッターとセッターのメソッドを提供する必要があります。あなたはSteveDonieのルートを行くべきではありませんJPA2.1で新しいライブラリへのアップデートとして

0

、 -

属性コンバーター宣言:コンバータが適用される(

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

} 

マークに永続性ユニットをフィールドにない場合はautoApply)のpersistence.xml

<class>UUIDAttributeConverter</class> 

で適用

これにより、特定の永続性単位(MySqlなど)でのみ変換が行われるように指定できます。また、項目をdbに正しくマップし、オブジェクト型を安全に保ちます。

希望すると便利です。

関連する問題