gpt4 book ai didi

java - 错误查找对象 Spring JPA : "Error accessing field by reflection for persistent property"

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:40 25 4
gpt4 key购买 nike

我有以下类(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com