Ошибка поиска объекта Spring JPA: «Ошибка доступа к полю при отражении для постоянного свойства» - PullRequest
1 голос
/ 31 октября 2019

У меня есть следующие классы:

@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);
}

Когда я пытаюсь сделатьcall,

ConjunctionAdapter c = conjunctionRepository.findByTargetAndChaserAndTimeOfCloseApproach(targetId, chaserId, timeOfCloseApproach());

Возвращает ошибку:

org.hibernate.property.access.spi.PropertyAccessException: ошибка при доступе к полю [private java.lang.String gcs.fds.focusoc.adapter.OrbitAdapter.id] по отражению для постоянного свойства [gcs.fds.focusoc.adapter.OrbitAdapter # id]: 02035A "

Я пробовал много разных решений, которые нашел, ноэто не работает для меня. Любая помощь?

1 Ответ

0 голосов
/ 31 октября 2019

Я решил это!

Изменение аннотации @Data классов для @Table с именем таблицы. Итак,

@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)]

Поэтому я добавил аннотацию @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);
}

И решено!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...