Spring Hibernate - FindByObject CrudRepository

时间:2016-12-09 15:38:36

标签: java spring hibernate

是否有可能(如果是这样,如何)在CrudRepository接口中添加自定义方法?

我有一个名为Foobar的实体类的以下DAO。为了这个问题 - 实体类可以有任意数量的字段/列。

package com.bar
import org.springframework.data.repository.CrudRepository;
import com.bar.Foobar
public interface FoobarCrudRepo extends CrudRepository<Foobar, Long> {
    public Foobar findByObject(Foobar JObj);
}

如果您删除该自定义方法,此代码可以正常工作,但如果我添加它,则会抛出错误(如上所述)。我对这篇文章(Update or SaveorUpdate in CRUDRespository, Is there any options available)的理解是,我只需要在界面中添加一个额外的方法(如示例所示),JPARepo将负责其余的工作。但是,我收到以下错误。我的想法 - 它对这个自定义类知之甚少。

这是我的错误:

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Foobar': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property object found for type Foobar!

为什么我想要一个你可能会问的findbyObject()?因此,我不会通过检查数据库来查找对象是否已添加并执行检查,从而不会将重复的数据行插入到数据库中。

任何建议都会有所帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

FindByObject不会查找对象,它会在名为Foobar的{​​{1}}类中查找字段。与其他人提到的一样,您可以检查对象的其他字段以查看它是否已存在。

例如,如果您的Object类包含FoobarString name字段,则可以创建类似String email的方法,如果存在,则会返回Foobar对象数据库中符合这些标准的记录。

所有查询方法都是复制SQL,所以问问自己,你能在SQL中“通过对象(记录)找到”吗?不,因为这没有任何意义。您的查询将返回记录(对象)满足某些条件的情况。

答案 1 :(得分:0)

您的代码不起作用,因为它使用findBy后面的Names并尝试使用它创建where条件。

所以findByObject创建:

where object = ?

通过id找到对象,你可以调用

findOne(?)