是否有可能(如果是这样,如何)在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()?因此,我不会通过检查数据库来查找对象是否已添加并执行检查,从而不会将重复的数据行插入到数据库中。
任何建议都会有所帮助,谢谢。
答案 0 :(得分:1)
FindByObject
不会查找对象,它会在名为Foobar
的{{1}}类中查找字段。与其他人提到的一样,您可以检查对象的其他字段以查看它是否已存在。
例如,如果您的Object
类包含Foobar
和String name
字段,则可以创建类似String email
的方法,如果存在,则会返回Foobar对象数据库中符合这些标准的记录。
所有查询方法都是复制SQL,所以问问自己,你能在SQL中“通过对象(记录)找到”吗?不,因为这没有任何意义。您的查询将返回记录(对象)满足某些条件的情况。
答案 1 :(得分:0)
您的代码不起作用,因为它使用findBy后面的Names并尝试使用它创建where条件。
所以findByObject创建:
where object = ?
通过id找到对象,你可以调用
findOne(?)