我有以下类(class):
@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: Error accessing field [private java.lang.String gcs.fds.focusoc.adapter.OrbitAdapter.id] by reflection for persistent property [gcs.fds.focusoc.adapter.OrbitAdapter#id] : 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: Parameter value [02035A] did not match expected type [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);
}
解决了!
关于java - 错误查找对象 Spring JPA : "Error accessing field by reflection for persistent property",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58640542/