Не удается сохранить объект из-за взаимосвязи внешнего ключа java.lang.IllegalArgumentException: объект не является экземпляром объявленного класса - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть две сущности A и B - A генерируется автоматически с использованием swagger-codegen-maven-plugin, и B создается мной и содержит отношение «многие к одному» с A. Автоматически сгенерированная (A) имеет4 атрибута, но соответствующая ему таблица в базе данных имеет дополнительный столбец id, который является справочным столбцом для внешнего ключа во втором объекте (B), который называется idA.

У меня естьчтобы сохранить объекты типа B в базе данных, и мне нужно также установить значение для idA. Несмотря на то, что значение правильно установлено, получая его от объекта типа A (взятого из базы данных), я получаю java.lang.IllegalArgumentException: объект не является экземпляром объявления класса. Я получаю значение, если у меня есть объект типа A, но если я назначу его объекту B, он выдаст мне эту ошибку.

Я покажу код:

@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2019-10-31T17:01:04.704+02:00")

public class A{

  protected Integer accountId = null;
  protected Integer range = null;
  protected Integer address = null;
  protected Integer agency = null;
  protected Long id;

@Column(
        name = "ID"
    )
    @GeneratedValue(
        strategy = GenerationType.AUTO
    )
    public Long getId() {
        return this.id;
    }

    public void setid(Long value) {
        this.id = value;
    }


@Entity
@Table(name = "STUDENTS")
public class B implements Serializable {

        private long id;
        private String name;
        private long idA;
        private long age;

@ManyToOne(targetEntity = A.class, cascade = {
                CascadeType.ALL
        })
        @JoinColumn(name = "ID_A", referencedColumnName = "ID", nullable = false)
        public long getIdA() {
            return idA;
        }

        public void setIdA(long idA) {
            this.idA= idA;
        }


EntityManager em;

List<A> entitiesList = repositoryA.findAllEntities(); // method which gets all the entries from the table

for(int i = 0; i < entitiesList.size(); i++) {
  B target = new B();
  target.setName("Andrew");
  target.setidA(entitiesList.get(i).getId()); // the value for the id is correctly taken from the database entry
  em.persist(B); ---> line which gives error because of IllegalArgumentException

Как мне сохранить мой объект, если автоматически сгенерированный класс не имеет метода получения или установки для столбца, являющегося внешним ключом?

...