java - NotFoundAction.EXCEPTION 不抛出异常

标签 java hibernate jpa spring-data-jpa spring-data

我有以下关系:

@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() 得到一个 null,当我只排除 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 Data 版本不兼容。

该项目使用 Hibernate 4.3.1.Final 来利用 JPA 2.1 功能;但是对于 spring-data-jpa 1.6.6.RELEASE,它不支持那个 Hibernate 版本。

因为一切正常(直到这个问题)我一开始没有注意到这一点。当我尝试将 spring-data-jpa 升级到 Hibernate 4.3 兼容版本时我做不到,因为 spring-data-jpa 从 Hibernate 跳转3 到 2.0.x 版本上的 Hibernate 5。这似乎也需要 Java 8,所以这对我来说是行不通的。

最终降级到 Hibernate 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>

关于java - NotFoundAction.EXCEPTION 不抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51366659/

相关文章:

java - 比较方法违反了其一般契约异常java 7

java - Akka Tomcat 问题

jpa - Spring启动数据jpa多个数据源entityManagerFactory错误

使用 Eclipse Link 进行 hibernate 搜索

java - 将 Jar 文件部署到 weblogic 12.1.3 时出现异常错误

java - 使用 Maven 包添加第 3 方 jar

spring - 整个类的事务注释+不包括单个方法

java - Hibernate DB2 ROW_NUMBER() 错误

java - Hibernate Criteria OR Restriction - 如果一个或两个列的值为 1,则获取列表

hibernate - JPA createQuery 或 @NamedQuery