2016-05-28 10 views
1

私はspringMVCアプリケーションで抽象サービスを作成しようとしています。私のデータは、私の層を通って完璧*流れますが、私の永続化(抽象化)、私のデータベースを更新/削除/保存する方法を見つけることができなかった、これらはクラスである:サービス抽象化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() { 
} 
} 
()のServlet.service:0

// - -

@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]がパス[/ tavalendo]のコンテキストで例外をスローしました[リクエスト処理に失敗しました。ネストされた例外はorg.springframework.beans.NotReadablePropertyExceptionです:Beanクラス[java.util.LinkedHashMap]のプロパティ 'id'が無効です:フォールバックアクセス時にプロパティのフィールドを見つけることができませんでした!]根本的な原因で org.springframework.beans.NotReadablePropertyException: Beanクラス[java.util.LinkedHashMap]のプロパティ 'id'が無効です:フォールバックアクセス時にプロパティのフィールドを見つけることができませんでした。 org.apache.catalina.valvesでorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) でorg.springframework.data.util.DirectFieldAccessFallbackBeanWrapper.getPropertyValue(DirectFieldAccessFallbackBeanWrapper.java:56) で。 AccessLogValve.invoke(AccessLogValve.java:956) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:625) at org.apache.tomcat.util。 net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:316) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads。 java.lang.Thread.runでTaskThread $ WrappingRunnable.run(TaskThread.java:61) (Thread.java:745)

誰もが起こったかを説明できますか?

+0

医学はIDフィールドを持っていますか?あなたは医学とMedicineRepositoryを投稿できますか? – Manu

+1

あなたの '/ tavalendo' JSPを見せてください – dit

+0

私の問題を理解するのに役立つコードをいくつか投稿しました@Manu – davidwillianx

答えて

0

それは、春は医学のidフィールドを見つけることができないようだ。

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

実は、医学idフィールドを持っていないようですので、あなたはそれを追加する必要があります。

+0

Medicineは、BaseDomainからIdプロパティを継承します。休止状態のgerenationはそれでうまく動作し、私は医学の内部にまだ同じ問題を設定しようとしました。 – davidwillianx

+0

また、BaseDomain – Manu

+0

yeah yuRightも投稿する必要があります。私は忘れました> _ <申し訳ありません、更新しました – davidwillianx