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

我试图使用JPA TopLink将

Java中实体的枚举属性的null值存储到Oracle数据库.代码执行时没有异常或警告,但实体未存储在数据库中.

该实体定义如下:

@Entity

public class LetterDoc {

...

@Column(name = "delivery_type", columnDefinition = "VARCHAR2(20)", nullable = true)

@Enumerated(EnumType.STRING)

private DocDeliveryTypeEnum deliveryType;

...

}

Enum类DocDeliveryTypeEnum只有必需的值.

public enum DocDeliveryTypeEnum {

NORMAL,

RECOMMENDED,

ACKNOWLEDGEMENT

}

在我的情况下,我有实体的实例,其中deliveryType是sence并且是必需的.但是,在某些情况下,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类中创建默认值吗?

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值