我已经定义了一个“java.util.UUID”作为“Id”字段的域类。
@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)”。
运行测试用例时出现问题。它说以下并没有执行任何测试用例。
Wrong column type in DBNAME_response for column id. Found: char, expected: uuid
答案 0 :(得分:1)
在Response
班级中,您将id
字段定义为UUID
类型,但MySQL没有原生UUID
类型,因此它声明了列为char(36)
。您可能需要做的是更改它以使该字段为String
,然后提供执行转换String <-> UUID
的getter和setter方法。
答案 1 :(得分:0)
作为对新库的更新, 使用JPA2.1,你不应该去SteveDonie的路线 -
声明属性转换器:
@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));
}
}
将持久性单元标记为persistence.xml中应用的转换器(如果不是autoApply)
<class>UUIDAttributeConverter</class>
应用于字段
@Id
@Column(unique = true, nullable = false, length = 64)
@Convert(converter = UUIDAttributeConverter.class)
private UUID guid;
这允许您指定转换应该仅在某些持久性单元(例如MySql)中发生,而不是在其他遵守的单元中发生。它还正确地将项目映射到db并保持对象类型安全。
希望这有帮助!