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

标签 java spring jpa reflection

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

相关文章:

java - 使用 JPA 连接从父实体返回子实体

java - 使用 Jackson 映射 JSON 时遇到问题

java - 尝试将 JSON 文件或字符串转换为 CSV 文件会得到空的 CSV 文件

spring - 按配置文件禁用/删除 Spring Boot 数据源

java - 服务器到客户端的响应状态

java - 如何摆脱 "HHH90000003: Use of DOM4J entity-mode is considered deprecated"

java - 为什么 Guava 的 ImmutableList 有这么多重载的 of() 方法?

java - Lucene查询语法中AND和+有什么区别

java - Spring 启动基础

java - JPA 持久性和 Hibernate javassist 对象