簡體   English   中英

Spring Hibernate-FindByObject CrudRepository

[英]Spring Hibernate - FindByObject CrudRepository

是否可以(如果可以,如何)在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);
}

如果您刪除該自定義方法,則此代碼可以正常工作,但如果添加該自定義方法,則會引發錯誤(如上)。 我從這篇文章( CRUDRespository中的Update或SaveorUpdate,是否有可用的選項 )的理解是,我只需要向該接口添加其他方法(如示例中所示),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()? 因此,我不會通過檢查數據庫以查看是否已添加對象並執行檢查來將重復的數據行插入數據庫。

任何建議都會有所幫助,謝謝。

FindByObject不會尋找對象,而是從字面上尋找Foobar類中名為Object的字段。 就像其他人提到的那樣,您可以檢查對象的其他字段以查看它是否已經存在。

例如,如果您的Foobar類具有String nameString email字段,則可以創建一個類似於public Foobar findByNameAndEmail(String name, String email) {} ,如果數據庫中存在一條記錄,它將返回Foobar對象。符合這些條件。

所有查詢方法所做的都是復制SQL,所以問問自己,您能否在SQL中“按對象(記錄)查找”? 不,因為那沒有道理。 您的查詢將在滿足某些條件的情況下返回一條記錄(對象)。

您的代碼不起作用,因為它使用了findBy后面的Names並嘗試使用它創建where條件。

因此findByObject創建:

where object = ?

通過ID查找對象,您可以調用

findOne(?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM