[英]JPA spring boot, Error accessing field XXXX by reflection for persistent property
[英]Error find object Spring JPA: “Error accessing field by reflection for persistent property”
我有以下課程:
@Entity(name = "focusoc_orbit")
@Data
public class OrbitAdapter extends Adapter{
@Id
private String id;
...
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
...
}
和,
@Entity(name = "focusoc_conjunction")
@Data
public class ConjunctionAdapter extends Adapter {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "target_id")
private OrbitAdapter target;
@ManyToOne
@JoinColumn(name = "chaser_id")
private OrbitAdapter chaser;
...
public OrbitAdapter getTarget(){
return target;
}
public void setTarget(OrbitAdapter target){
this.target = target;
}
public String getChaserId(){
return chaserId;
}
public void setChaser(OrbitAdapter chaser){
this.chaser = chaser;
}
...
}
我還定義了存儲庫:
public interface ConjunctionRepository extends PagingAndSortingRepository<ConjunctionAdapter, Long> {
public ConjunctionAdapter findByTargetAndChaserAndTimeOfCloseApproach(String target, String chaser, Date timeOfCloseApproach);
}
當我嘗試撥打電話時,
ConjunctionAdapter c = conjunctionRepository.findByTargetAndChaserAndTimeOfCloseApproach(targetId, chaserId, timeOfCloseApproach());
它返回錯誤:
org.hibernate.property.access.spi.PropertyAccessException:訪問字段時出錯 [私有 java.lang.String gcs.fds.focusoc.adapter.OrbitAdapter.id] 由持久屬性的反射 [gcs.fds#.focus編號]:02035A"
我嘗試了很多我發現的不同解決方案,但它對我不起作用。 有什么幫助嗎?
我解決了!
使用表名更改 @Table 的類的注釋 @Data。 所以,
@Entity
@Table(name = "focusoc_orbit")
public class OrbitAdapter extends Adapter{
@Id
private String id;
...
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
...
}
和,
@Entity
@Table(name = "focusoc_conjunction")
public class ConjunctionAdapter extends Adapter {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "target_id")
private OrbitAdapter target;
@ManyToOne
@JoinColumn(name = "chaser_id")
private OrbitAdapter chaser;
...
public OrbitAdapter getTarget(){
return target;
}
public void setTarget(OrbitAdapter target){
this.target = target;
}
public String getChaserId(){
return chaserId;
}
public void setChaser(OrbitAdapter chaser){
this.chaser = chaser;
}
...
}
這樣做會返回錯誤,
java.lang.IllegalArgumentException:參數值 [02035A] 與預期類型不匹配 [gcs.fds.focusoc.adapter.OrbitAdapter (n/a)]
所以我在 Repository 中添加了注解 @Query 以指定必須在數據庫中搜索哪些內容,
public interface ConjunctionRepository extends PagingAndSortingRepository<ConjunctionAdapter, Long> {
@Query("SELECT c FROM ConjunctionAdapter c WHERE c.target.id = :target AND c.chaser.id = :chaser AND c.timeOfCloseApproach = :timeOfCloseApproach")
public ConjunctionAdapter findByTargetAndChaserAndTimeOfCloseApproach(String target, String chaser, Date timeOfCloseApproach);
}
並解決了!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.