NotFoundAction.EXCEPTION不是抛出一个异常

圣特尔莫马克斯:

我有以下关系:

@Entity
public class SomeEntity {
    //...

    @EmbeddedId
    private SomeEntityIdentity id;

    @OneToOne
    @NotFound(action = NotFoundAction.EXCEPTION) //This is the important bit
    @JoinColumns({
        //...
    })
    private OtherEntity example;

    //...
}

然后,我用Spring数据的findOne()通过ID抢我的实体:

SomeEntityIdentity id = new SomeEntityIdentity();
id.setAttribute1(1);
id.setAttribute2(new BigDecimal(123));
return this.someEntityRepository.findOne(id);

问题是,如果没有异常被抛出OtherEntity是找不到的,因为findOne()简单地返回null。即使我设置@OneToOne(optional = false)我仍然得到一个空findOne(),那时我才除外OtherEntity为空。

我相信,一个异常应该被抛出。有没有人有任何想法?

谢谢!


编辑:身份及以下库类。

@Embeddable
public class SomeEntityIdentity implements Serializable {
    private int attribute1;
    private BigDecimal attribute2;

    public void setAttribute1(int attribute1) {
        this.attribute1 = attribute1;
    }

    public void setAttribute2(BigDecimal attribute2) {
        this.attribute2 = attribute2;
    }
}

public interface SomeEntityRepository extends JpaRepository<SomeEntity, SomeEntityIdentity> {
}
圣特尔莫马克斯:

原来是Hibernate和Spring数据版本之间的不兼容。

使用Hibernate这个项目是4.3.1.Final充分利用JPA 2.1功能; 但是spring-data-jpa 1.6.6.RELEASE,这不支持休眠版本。

因为一切都正常工作(直到这个问题)我没有在第一次注意到这一点。当我试图升级spring-data-jpa到休眠4.3兼容的版本,我不能,因为spring-data-jpa从休眠3跳转到休眠5 2.0.x版本。这似乎也需要Java 8,所以这是一个没有去我。

最终降级到休眠3.6.10.Final和一切开始工作正常。

TL; DR:经常检查Spring和其他图书馆之间的版本兼容性,即使没有明显的错误。

我只是说,Spring版本管理是共苦想完成。


工作依赖配置:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>3.6.10.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>3.6.10.Final</version>
</dependency>

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>1.6.6.RELEASE</version>
</dependency>

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

返回一个异常而不是抛出

为什么SimpleDateFormat.parse这里不是抛出一个异常?

通过引用传递Error对象,而不是从方法中抛出异常,是一个好主意吗?

为什么当一个函数类型参数传递,而不是消费者不,每个Java方法不抛出异常?

捕获另一个类抛出的异常?

它是合理的,从异步方法抛出一个异常?

JUnit的5:如何断言抛出一个异常?

抛出一个异常,如果流没有结果

如果从UncaughtExceptionHandler内部抛出一个异常会怎样?

为什么要抛出一个异常尝试负荷延伸例外(虽然不执行的话)的类,但不是一个普通班

如何检查一个变量是一个列表,并且这个列表中的数据类型都是整数,如果不是,则相应地抛出异常?

Java的模拟抛出一个异常,然后返回一个值?

如何抛出一个异常,从另一个线程的功能?

抛出一个泛型异常作为原始异常类型

改造 - 抛出异常java.lang.IllegalArgumentException异常:只有一个编码注释允许

是否存在一个MySQL JDBC异常列表,该列表描述了抛出每个异常的原因?

它是一个不好的做法,抛出异常在Java 8个可选的过滤器

重构一个方法,如果抛出一些异常,该方法返回false

如果抛出异常,则重复一次或多次执行一个方法或函数

如果未处理则抛出相同的Exception,或者构造一个新的Exception?

为什么一个拉姆达变化过载时,它抛出一个运行时异常?

为什么我的 VBScript 会抛出九个弹出窗口而不是一个?

在Java中,使用throws Exception而不是抛出多个特定异常是一种好习惯吗?

在春季启动时在@ExceptionHandler 内抛出另一个异常不起作用

如果我尝试读取一个不存在的文件会抛出什么异常?

如何从外部块重新抛出一个lambda块中的异常?

没有任何理由抛出一个“异常”,立刻抓住它?

正在运行的线程的Java中抛出一个异常

如果另一个线程抛出异常,则单元测试失败