gpt4 book ai didi

java - 是否可以将枚举属性的空值存储到数据库中?

转载 作者:搜寻专家 更新时间:2023-11-01 00:51:57 26 4
gpt4 key购买 nike

我正在尝试将 Java 中实体的 enumerated 属性的 null 值存储到 Oracle 数据库使用 JPA TopLink。代码执行无异常或警告,但实体未存储在数据库中。

实体定义如下:

@Entity
public class LetterDoc {
...
@Column(name = "delivery_type", columnDefinition = "VARCHAR2(20)", nullable = true)
@Enumerated(EnumType.STRING)
private DocDeliveryTypeEnum deliveryType;
...
}

枚举类 DocDeliveryTypeEnum 只有必需的值。

public enum DocDeliveryTypeEnum {
NORMAL,
RECOMMENDED,
ACKNOWLEDGEMENT
}

在我的情况下,我有实体的实例,其中 deliveryType 有意义并且是必需的。但是,在某些情况下,deliveryType 是不相关,我想将其保留为null。我不想设置默认值,因为对于这种情况没有足够的值。

实体实例的值设置为 null,但是当我尝试在数据库中保留和​​刷新实例时,它只是没有存储,尽管该列定义为启用了 NULL 值的 VARCHAR2(20)。

情况是这样的:

LetterDoc let = new LetterDoc();
// settery ostatnich atributu
let.setDeliveryType(null);
try {
emptyDocDAO.persist(let);
emptyDocDAO.flush();
} catch (Exception e) {
// no exception is really catched :(
log.error(e);
}
// here I have the id of the entity

持久化时确实没有抛出异常,只是没有存储实体。当我稍后尝试通过 ID 在另一个线程中获取实体时,它失败并出现 NoResultException。

是否有机会使这项工作生效,或者我是否真的必须在坚持之前为所有枚举属性设置一个值?我真的必须在 Enum 类中创建默认值吗?

我已经通过设置在特定情况下没有多大意义的默认值解决了我的问题。但是,我想知道是否还有其他选择。

非常感谢您的经验和建议。

最佳答案

是的,您可以为枚举属性存储 null。

我不明白你怎么什么都得不到,是不是发生了你没有捕捉到的异常?

最好启用日志记录并包含日志和您的代码,捕获任何异常并包含堆栈跟踪。

关于java - 是否可以将枚举属性的空值存储到数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11429577/

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