NotFoundAction.EXCEPTION不引发异常

时间:2018-07-16 16:52:08

标签: 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(),我仍然从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> {
}

1 个答案:

答案 0 :(得分:1)

原来是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-jpa2.0.x版本上从Hibernate 3跳到了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>