将JoinColumn中的空字符串视为null

g00glen00b

我目前正在使用以下方案进行项目:

Profile
-------
CODE          |  CHAR(6)
CODE_FUNCTION |  CHAR(2)

Function
--------
CODE          |  CHAR(2)

这里最重要的部分是fromProfileFunctionCODE_FUNCTION=> CODE的外键

但是,并非每个配置文件都具有功能,因此在某些情况下CODE_FUNCTION只是空白行(" ")。

Profile通过使用以下方式映射了函数(在中):

@OneToOne
@JoinColumn(name = "CODE_FUNCTION", referencedColumnName = "CODE")
private Function function;

Function表中,代码通过使用以下方式映射:

@Id
@Column(name = "CODE_FUNCTION")
private String code;

当配置文件具有功能时,这可以正常工作,但是,当没有输入功能代码时,出现以下错误:

Caused by: javax.persistence.EntityNotFoundException: Unable to find org.example.entities.Function with id   
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$JpaEntityNotFoundDelegate.handleEntityNotFound(EntityManagerFactoryBuilderImpl.java:181)
    at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:218)
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:274)
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:150)
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1070)
    at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:989)
    at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:716)
    at org.hibernate.type.EntityType.resolve(EntityType.java:502)
    at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:170)
    at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:144)
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1114)
    at org.hibernate.loader.Loader.processResultSet(Loader.java:972)
    at org.hibernate.loader.Loader.doQuery(Loader.java:920)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:324)
    at org.hibernate.loader.Loader.loadEntity(Loader.java:2148)
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:78)
    at org.hibernate.loader.entity.EntityLoader.loadByUniqueKey(EntityLoader.java:161)
    at org.hibernate.persister.entity.AbstractEntityPersister.loadByUniqueKey(AbstractEntityPersister.java:2385)
    at org.hibernate.type.EntityType.loadByUniqueKey(EntityType.java:767)
    at org.hibernate.type.EntityType.resolve(EntityType.java:505)
    at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:170)
    at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:144)
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1114)
    at org.hibernate.loader.Loader.processResultSet(Loader.java:972)
    at org.hibernate.loader.Loader.doQuery(Loader.java:920)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354)
    at org.hibernate.loader.Loader.doList(Loader.java:2553)
    at org.hibernate.loader.Loader.doList(Loader.java:2539)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369)
    at org.hibernate.loader.Loader.list(Loader.java:2364)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:231)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264)
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573)
    at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449)
    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:606)
    at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:311)
    at com.sun.proxy.$Proxy77.getResultList(Unknown Source)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:96)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:61)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:96)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:86)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:337)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:155)
    ... 92 more

这里的问题(我假设)是,因为我们使用的是空字符串(而不是NULL`),所以映射失败,因为它正在尝试查找具有该ID的函数。

有没有一种方法可以在不调整所有表记录并将其替换为这些空字符串的情况下防止这种情况发生NULL例如,我知道我可以使用实体侦听器来处理某些字段,但是我可以对带注释的字段执行相同的操作@JoinColumn吗?

沃里格

添加@NotFound批注

@OneToOne
@JoinColumn(name = "CODE_FUNCTION", referencedColumnName = "CODE")
@NotFound(action=NotFoundAction.IGNORE)
private Function function;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么DB2将空字符串视为null?

来自分类Dev

访问查询不一致地将空字符串视为null

来自分类Dev

为什么DB2将空字符串视为null?

来自分类Dev

访问查询不一致地将空字符串视为null

来自分类Dev

为什么将空字符串文字视为true?

来自分类Dev

javascript处理将双引号视为空字符串

来自分类Dev

将空查询字符串参数视为空字符串,而不使用参数类

来自分类Dev

强制perl XMLin将空标记视为空字符串?

来自分类Dev

Python / Pandas-使用多列合并时将“空字符串”视为匹配项

来自分类Dev

强制perl XMLin将空标记视为空字符串?

来自分类Dev

以html格式将空字符串更新为NULL

来自分类Dev

Jersey POJOMappingFeature将null转换为空字符串?

来自分类Dev

将整个数据库中的空字符串('')设置为NULL

来自分类Dev

有效地将空字符串替换为数组中的null

来自分类Dev

python将列表中的空字符串设置为null

来自分类Dev

有效地将空字符串替换为数组中的null

来自分类Dev

在存储过程中,空字符串是否被视为空参数?

来自分类Dev

为什么在JavaScript中不空字符串== null

来自分类Dev

将C样式字符串初始化为NULL与空字符串之间的区别

来自分类Dev

将数组中的空字符串替换为0

来自分类Dev

Oracle空字符串/ NULL

来自分类Dev

Java空字符串等于NULL

来自分类Dev

Java空字符串等于NULL

来自分类Dev

将字符串文字视为常量

来自分类Dev

Python将字典视为字符串

来自分类Dev

MySQL将字符串视为整数

来自分类Dev

将字符串视为整数

来自分类Dev

是否有双管道运算符的速记等效项,将空字符串视为假?

来自分类Dev

将空字符串转换为“”

Related 相关文章

热门标签

归档