gpt4 book ai didi

java - JPA:AttributeConverter 的参数化实例

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

我们正在开发一个连接到遗留数据库的应用程序。这是非常“无类型”的,几乎所有数据都使用字符串。更糟糕的是,它远非同质的:它对日期或时间('YYDDMM'、'HHMMSS'、毫秒)和 boolean 值('Y'/'N'、'X'/' ')使用不同的模式,因为示例。

我们想使用 JPA (EclipseLink) 和自定义转换器。问题是 @Convert 需要一个实现 AttributeConverter 的类,所以我们必须为每个模式创建新的类。我想要的是一个 BooleanConverter 类,它可以用值“Y”/“N”或“X”/“”实例化。

这显然不符合 JPA 规范,但也许可以使用 EclipseLink 注释/配置。看着它的@Convert注解,可以通过名称指定转换器。如果我可以注册一个 ynBooleanConverterxSpaceBooleanConverter,这对我来说听起来不错:

// Unfortunately, this method does not exist :(
Session.addConverter('ynBooleanConverter', new BooleanConverter("Y", "N"));

@Entity
public class MyEntity {

@Convert("ynBooleanConverter")
private Boolean myBoolean;

...
}

这可能吗?我们还有哪些其他选择?

最佳答案

尝试 @ObjectTypeConverter :

@Entity
@ObjectTypeConverters({
@ObjectTypeConverter(name = "ynBooleanConverter", objectType = Boolean.class, dataType = String.class,
conversionValues = {
@ConversionValue(objectValue = "true", dataValue = "Y"),
@ConversionValue(objectValue = "false", dataValue = "N") }),
@ObjectTypeConverter(name = "xSpaceBooleanConverter", objectType = Boolean.class, dataType = String.class,
conversionValues = {
@ConversionValue(objectValue = "true", dataValue = "X"),
@ConversionValue(objectValue = "false", dataValue = " ") }),
})
public class MyEntity {

@Convert("ynBooleanConverter")
private boolean ynBoolean;

@Convert("xSpaceBooleanConverter")
private boolean xSpaceBoolean;
}

关于java - JPA:AttributeConverter 的参数化实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32998048/

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