【发布时间】:2017-04-25 03:22:02
【问题描述】:
是否有可能(如果有,如何)在 CrudRepository 接口中添加自定义方法?
我有以下 DAO,其中包含一个名为 Foobar 的实体类。为了这个问题 - 实体类可以有任意数量的字段/列。
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()?这样我就不会通过检查数据库以查看对象是否已添加并执行检查来将重复的数据行插入数据库。
任何建议都会有所帮助,谢谢。
【问题讨论】:
-
您想通过使用整个对象作为键来检查对象是否存在于数据库中?为什么没有唯一 ID?
-
不是作为键,而是作为对象。据我了解,uniqueID 是在插入数据库后生成的,而不是之前生成的。也就是说,我如何才能在插入之前找到 uniqueID?
-
要做你想做的事,你几乎只需要选择需要唯一的字段以使对象是唯一的,然后将这些字段与当前数据库中的内容进行检查。跨度>
-
在网上搜索了一段时间后,我同意你和 jWest 的看法。这听起来几乎像一个“构造函数”(不完全是)被放置在这里。是否可以在调用此 DAO 的服务层类中放置一个 if 语句?
-
这和休眠有什么关系?