JPA / Hibernate.Как предотвратить наследование префикса класса get в поле автоматически - PullRequest
0 голосов
/ 07 июня 2018

Следующая ситуация: когда я пытаюсь сохранить сущность с полем @EmbeddedId, hibernate превращает поле "мандант" из базового класса в "contact_mandant" и выдает ошибку неверного идентификатора.Имя столбца в таблице «Контакт» - это «мандат», а не «контакт_мандат».Я просто не понимаю, почему автоматически происходит изменение имени поля.Вот некоторый код:

    @MappedSuperclass
    public abstract class BaseId implements Serializable {

      @Column(name = "Mandant", precision = 2, nullable = false)
      protected Byte mandant;

      ...getter, setter...
    }

    @Embeddable
    public class ContactId extends BaseId implements Serializable {

       @Column(name = "Id_Contact", precision = 9)
       private Long id;

      ...getter, setter...
    }

    @Entity
    public class Contact extends Base {

      @EmbeddedId
      private ContactId contactId;

      ...getter, setter...
    }

   @Entity(name = "Employee")
   public class Employee extends Base {

    @EmbeddedId
    private EmployeeId id;

    @MapsId("contactId")
    @JoinColumns(value = {
            @JoinColumn(referencedColumnName = "Mandant"),
            @JoinColumn(referencedColumnName = "Id_Contact")
    })
    @OneToOne(fetch = FetchType.LAZY)
    private Contact contact;

       ...getter, setter...
    }

   @Embeddable
   public class EmployeeId extends BaseId implements Serializable {

     @Column(name = "Id_Employee", precision = 9)
     private Long id;

     private ContactId contactId;

      ...getter, setter...
    }

Я из мира .Net, и я еще не очень хорошо знаком с JPA.Может, кто-нибудь подскажет мне, что я делаю неправильно или в чем проблема с моей реализацией, пожалуйста?

С уважением, Newsman

Ps: Spring 4 и Hibernate 5

1 Ответ

0 голосов
/ 08 июня 2018

Решение с общим составным ключом:

Без "id" в @MapsId платформа генерирует следующий запрос:

"вставить в значения EMPLOYEE_DETAILS (AEN_DATUM, SACHB_KZ, DETAILS, employee_id_employee, employee_MANDANT)(?,?,?,?,?) "

После добавления" id "в @MapsId запрос выглядит следующим образом:

" вставить в EMPLOYEE_DETAILS (AEN_DATUM, SACHB_KZ, DETAILS, id_employee, MANDANT) значения (?,?,?,?,?) "

@Entity(name = "Employee")
@Table(name = "EMPLOYEE")
public class Employee extends Base {

    @EmbeddedId
    private EmployeeId id;

    @Column(name = "FIRST_NAME", length = 100, nullable = false)
    private String firstName;

    @Column(name = "SUR_NAME", length = 100, nullable = false)
    private String surName;
...
}

@Embeddable
public class EmployeeId extends BaseId implements Serializable {

    @Column(name = "id_employee", precision = 9)
    private Long employeeId;
...
}

@Entity(name = "EmployeeDetails")
@Table(name = "EMPLOYEE_DETAILS")
public class EmployeeDetails extends Base {

    @EmbeddedId
    private EmployeeId id;

    @Column(name = "DETAILS", nullable = false)
    private String details;

    @MapsId("id")
    @OneToOne
    private Employee employee;
...
}

Это не та же реализация, что и выше, но проблема была та же.Запрос был сгенерирован с CONTACT_MANDANT вместо MANDANT.

peace

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