1

springMVC アプリケーションで抽象サービスを作成しようとしています。私のデータフロー*は私のレイヤーを完全に通過しますが、私の永続性(抽象化)は、データベースを保存/削除/更新する方法を見つけることができませんでした.これらはクラスです:

abstract class BaseServiceImpl<T, ID extends Serializable>
 implements BaseService<T, ID> {

protected abstract BaseRepository<T, ID> getRepository();

private BaseRepository<T, ID> repository;

public BaseServiceImpl(BaseRepository<T, ID> repository){
   this.repository = repository;
}

public List<T> findAll(){
    return getRepository().findAll();
}

public T find(ID id){
    return getRepository().findOne(id);
}

public T save(T persisted){
    return this.repository.save(persisted);
}

public void delete(ID id){
    getRepository().delete(id);
}

public long count(){
    return getRepository().count();
}

public boolean exists(ID id){
    return getRepository().exists(id);
}  
}

//---

@Service
public class MedicineServiceImpl
extends BaseServiceImpl<Medicine, Integer> 
implements MedicineService {

@Autowired
private MedicineRepository repository;

@Autowired
public MedicineServiceImpl(MedicineRepository repository) {
    super(repository);
}

@Override
public BaseRepository<Medicine, Integer> getRepository() {
    return repository;
}
}

//--

@MappedSuperclass
abstract class BaseDomain {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}
}

//--

@Entity
@Table(name = "medicines")
public class Medicine
extends BaseDomain implements Serializable{

@NotNull
private String name;
private String description;
private String purpose;
@Column(name = "active_principle")
private String activePrinciple;
@Column(name = "therapeutic_class")
private String therapeuticClass;
@Column(name = "ean_code")
private String eanCode;
@Column(name = "ms_code")
private String msCode;
@Column(name = "avisa_warning")
private String anvisaWarning;
@Column(name = "lab_name")
private String labName;
@Column(name = "lab_phone")
private String labPhone;

@NotNull
private String contraindication;

public Medicine() {
}
}

//--

@NoRepositoryBean
public interface BaseRepository<T,ID extends Serializable>
extends Repository<T,ID> {

List<T> findAll();

long count();

void delete(ID id);

T save(T s);

T findOne(ID id);

boolean exists(ID id);

void delete(T deleted);

}

//--

@Repository
public interface MedicineRepository 
extends BaseRepository<Medicine,    Integer>{

}

500 ステータス エラーが発生し、tocatlog に次のメッセージが表示されます。

SEVERE: サーブレット [TavalendoDispatcherServlet] の Servlet.service() がパス [/tavalendo] のコンテキストで例外をスローしました [リクエストの処理に失敗しました。ネストされた例外は org.springframework.beans.NotReadablePropertyException: Invalid property 'id' of bean class [java.util.LinkedHashMap]: Could not find field for property during fallback access!] 根本原因 org.springframework.beans.NotReadablePropertyException: Invalid Bean クラス [java.util.LinkedHashMap] のプロパティ 'id': フォールバック アクセス中にプロパティのフィールドが見つかりませんでした! org.springframework.data.util.DirectFieldAccessFallbackBeanWrapper.getPropertyValue(DirectFieldAccessFallbackBeanWrapper.java:56) で org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) で org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:

何が起こったのか説明できる人はいますか?

4

4 に答える 4

0

Spring が Medicine の id フィールドを見つけられないようです。

Invalid property 'id' of bean class [java.util.LinkedHashMap]: Could not find field for property during fallback access!]

実際、医学にはフィールドがないようidなので、追加する必要があります。

于 2016-05-28T18:48:58.310 に答える
0

JPAでProjectionを使用しているときに同じ問題が発生しました。

エラーコード:

Optional<List<AbcProj>> getData(--);

以下の変更を行った結果、解決しました。

List<AbcProj> getData(--);
于 2020-12-09T15:03:57.070 に答える