java 枚举字段_java – 如何持久化具有枚举字段的对象

我在我的域模型中使用枚举,但是当我尝试将对象持久化到数据库时,我收到以下错误:

Exception in thread "main" java.lang.ClassCastException: nl.ru.cmbi.pdbeter.core.model.enums.Enum_WhifFunction cannot be cast to java.lang.String

at org.hibernate.validator.NotEmptyValidator.isValid(NotEmptyValidator.java:36)

at org.hibernate.validator.ClassValidator.getInvalidValues(ClassValidator.java:386)

at org.hibernate.validator.ClassValidator.getInvalidValues(ClassValidator.java:352)

at org.hibernate.validator.event.ValidateEventListener.validate(ValidateEventListener.java:139)

at org.hibernate.validator.event.ValidateEventListener.onPreInsert(ValidateEventListener.java:172)

at org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:142)

at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:65)

at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)

at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)

at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)

at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)

at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)

at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)

at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)

at nl.ru.cmbi.pdbeter.core.controller.DAO.GenericDAO.makePersistent(GenericDAO.java:73)

at nl.ru.cmbi.pdbeter.core.controller.DAO.WhifFunctionDAO.getWhifFunctionSet(WhifFunctionDAO.java:36)

at nl.ru.cmbi.pdbeter.core.controller.DAO.LoggedErrorWhifDAO.updateWhifFunctionSet(LoggedErrorWhifDAO.java:42)

at nl.ru.cmbi.pdbeter.whifclient.controller.WhifFunctionsUpdater.executeWhifFunctionsByAccessionCode(WhifFunctionsUpdater.java:93)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:616)

at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)

at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)

at $Proxy31.executeWhifFunctionsByAccessionCode(Unknown Source)

at nl.ru.cmbi.pdbeter.whifclient.controller.WhifFunctionsExecutor.executeWhifFunctions(WhifFunctionsExecutor.java:26)

at nl.ru.cmbi.pdbeter.whifclient.controller.WhifClient.updateWhifFunctions(WhifClient.java:22)

at nl.ru.cmbi.pdbeter.updater.controller.UpdaterMain.start(UpdaterMain.java:65)

at nl.ru.cmbi.pdbeter.updater.controller.UpdaterMain.main(UpdaterMain.java:44)

这是我的域名模型:

package nl.ru.cmbi.pdbeter.core.model.domain;

import java.io.Serializable;

import java.util.HashSet;

import java.util.Set;

import javax.persistence.CascadeType;

import javax.persistence.Entity;

import javax.persistence.EnumType;

import javax.persistence.Enumerated;

import javax.persistence.ManyToMany;

import lombok.AccessLevel;

import lombok.Data;

import lombok.EqualsAndHashCode;

import lombok.NoArgsConstructor;

import nl.ru.cmbi.pdbeter.core.model.enums.Enum_WhifFunction;

import org.hibernate.annotations.NaturalId;

import org.hibernate.validator.NotEmpty;

@Entity

@Data

@NoArgsConstructor(access = AccessLevel.PROTECTED)

@EqualsAndHashCode(callSuper = false, of = { "whifFunction" })

@SuppressWarnings("PMD.UnusedPrivateField")

public class WhifFunction extends DomainObject implements Serializable {

@NaturalId

@NotEmpty

@Enumerated(EnumType.STRING)

private Enum_WhifFunction whifFunction;

@ManyToMany(mappedBy = "whifFunctionSet", cascade = CascadeType.ALL)

private Set loggedErrorWhifSet = new HashSet();

public WhifFunction(Enum_WhifFunction whifFunction) {

if (whifFunction == null) {

throw new IllegalStateException("WhifFunction is null");

} else {

this.whifFunction = whifFunction;

}

}

@Override

public String toString() {

return whifFunction.toString();

}

}

为什么@Enumerated注释不起作用,因为我认为它应该起作用?如果它按照预期的那样工作,我怎样才能让它按照我现在认为有效的方式工作?或者换句话说:如何持久化具有枚举字段的对象.

编辑:

感谢所有的答案. NotEmpty是偶然的,我没有看到它.我必须做很多映射,所以我复制粘贴了很多东西,但是当我从字符串更改为枚举时,意外忘记删除NotEmpty.下次我会尝试更仔细地查看堆栈跟踪,我完全错过了NotEmptyValidator.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值