Eclipselink пытается вставить нулевое значение в таблицу - PullRequest
0 голосов
/ 09 ноября 2018

В настоящее время я пытаюсь создать отображение многих ко многим, используя eclipselink. Обратите внимание, что для этого конкретного примера не используется таблица для разрешения отношения (я знаю, что это не очень хорошая практика, но она необходима для этого конкретного примера).

Я создал схему базы данных и таблицы employee3 и страховку для сопоставления. Таблица сотрудника содержит столбец с именем insurance_id, который является частью первичного ключа для создания сопоставления. То же самое касается страхования с employee_id.

Теперь для кода:

Вот код для двух классов:

Первый сотрудник:

@Entity
@Table(name="employee3", schema = "many_to_many")
public class EmployeeManyToMany
{  
  protected EmployeeManyToMany()
  {

  }

  @Id
  private int id;

  private String firstName;
  private String lastName;

  @ManyToMany(cascade =  CascadeType.PERSIST)
  private Collection<InsuranceManyToMany> insurance;


  public EmployeeManyToMany(int id, String firstName, String lastName)
  {
    this.id = id;
    this.firstName = firstName;
    this.lastName = lastName;
    insurance = new ArrayList<InsuranceManyToMany>();
  }
.....

И страхование:

@Entity
@Table(name = "insurance", schema = "many_to_many")
public class InsuranceManyToMany
{
  @Id
  @Column(name = "id")
  private int insuranceId;
  private String company;

  @ManyToMany(mappedBy = "insurance", cascade = CascadeType.PERSIST)
  private Collection<EmployeeManyToMany> employee;

  protected InsuranceManyToMany()
  {
  }

  public void addEmployee(EmployeeManyToMany emp)
  {
     employee.add(emp);
  }

  public InsuranceManyToMany(String company, int insuranceId)
  {
     this.insuranceId = insuranceId;
     this.company = company;
     employee = new ArrayList<EmployeeManyToMany>();
  }
....

После того, как я создаю объект Employee и добавляю к нему список страховок, я пытаюсь сохранить его в базе данных. Что приводит к следующей ошибке:

javax.persistence.RollbackException: Exception [EclipseLink-4002]              
Eclipse Persistence Services - 2.7.3.v20180807-4be1041):    
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: null value 
in column "insurance_id" violates not-null constraint
Detail: Failing row contains (1, hans, test, null).
Error Code: 0
Call: INSERT INTO many_to_many.employee3 (ID, FIRSTNAME, LASTNAME) VALUES
(?, ?, ?)
bind => [3 parameters bound]
Query: InsertObjectQuery(swd_ws18_06_Tag3.EmployeeManyToMany@88d98e)

Понятия не имею, почему это происходит, поскольку значения никогда не бывают нулевыми.

Любая помощь приветствуется!

BR Simon

...