gpt4 book ai didi

java - 能否说服 JPA 在例如 UUID 和字符串之间进行转换?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:56:44 25 4
gpt4 key购买 nike

我有一个 Java 对象,它有一个 UUID 字段。我希望能够以明显的方式将这个对象持久化到数据库中;然而,Basic 映射将使用 Java 序列化来编写它,而我希望 UUID 以其明显的字符串形式出现。有没有办法为该字段提供一个 UUID <-> 字符串转换器到 JPA,该字段将在读取和写入时使用,以便我可以自然地处理这种类型?

最佳答案

Chris Lercher 评论 Note: Starting from JPA 2.1, a @Convert annotation can be used with an AttributeConverter<UUID, String> .

这种方法效果很好,并且与任何 JPA 提供程序兼容,而 @Type(type = "uuid-char")是供应商特定的。此外,与 autoApply=true应用于每个实体的每个字段,因此不需要在每个实体中对每个字段进行注释。请参阅文档 here并检查以下示例:

转换器类

@Converter(autoApply = true)
public class UuidConverter implements AttributeConverter<UUID, String> {

@Override
public String convertToDatabaseColumn(final UUID entityValue) {
return ofNullable(entityValue)
.map(entityUuid -> entityUuid.toString())
.orElse(null);
}

@Override
public UUID convertToEntityAttribute(final String databaseValue) {
return ofNullable(databaseValue)
.map(databaseUuid -> UUID.fromString(databaseUuid))
.orElse(null);
}
}


实体

@Entity
public class Customer implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;

@Column
private String name;

@Column(nullable = false, unique = true, updatable = false, columnDefinition="CHAR(36)")
private UUID customerId = randomUUID();

//.....
}


这是它在数据库中的样子

TABLE customer
ID BIGINT(19) NO PRI (NEXT VALUE FOR SYSTEM_SEQUENCE_5D3)
NAME VARCHAR(255) YES NULL
CUSTOMER_ID VARCHAR(36) NO UNI NULL

关于java - 能否说服 JPA 在例如 UUID 和字符串之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8446378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com