Hibernate генерирует запрос в неправильном порядке, сохраняя отношение «многие ко многим» с дополнительным столбцом - PullRequest
0 голосов
/ 24 августа 2018

Я использую Hibernate 5.0.12 с Spring Framework 4.3.10.В моем проекте есть две сущности с отношением «многие ко многим» с дополнительным столбцом.После сохранения одного из этих объектов Hibernate генерирует SQL-запросы в неправильном порядке.Это приводит к ошибке ORA-02291.

Мои объекты:

SignedDocument.java

@Entity
@Table(name="SIGNED_DOCUMENTS", schema="KTS_OWNER")
@Data @EqualsAndHashCode(exclude={"signers"})
public class SignedDocument implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="id")
    private long id;
    @Column(name="file_name", nullable = false)
    private String fileName;
    @Column(name="file_content", nullable = false)
    @Lob
    private byte[] fileContent;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="id.doc")
    private Set<SIGNED_DOCUMENTS_SIGNERS> signers;
}

Signer.java

@Entity
@Table(name="SIGNERS", schema="KTS_OWNER")
@Data @EqualsAndHashCode(exclude={"docs"})
public class Signer implements Serializable {

    @Id
    @Column(name="id")
    private long id;
    @Column(name="first_name", nullable = false)
    private String firstName;


    @OneToMany(mappedBy="id.signer")
    private Set<SIGNED_DOCUMENTS_SIGNERS> docs;

}

И таблица ассоциаций между ними.

@Entity
@Table(name="SIGNED_DOCUMENTS_SIGNERS", schema="KTS_OWNER")
@Data
public class SIGNED_DOCUMENTS_SIGNERS implements Serializable {

    @EmbeddedId
    private SIGNED_DOCUMENTS_SIGNERS_PK id;

    @Column(name="sign_order", nullable = false)
    private long signOrder;
    @Column(name="esign")
    private byte[] esign;

}

Где первичный ключ

@Embeddable
@Data public class SIGNED_DOCUMENTS_SIGNERS_PK implements Serializable{
    @ManyToOne(fetch=FetchType.LAZY)
    private SignedDocument doc;

    @ManyToOne(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
    private Signer signer;
}

Выход в спящем режиме:

2018-08-24 15:30:22.577 DEBUG 8972 --- [nio-8080-exec-3] org.hibernate.SQL                        : insert into kts_owner.signed_documents (file_name, id, file_content) values (?, ?, ?)
Hibernate: insert into kts_owner.signed_documents (file_name, id, file_content) values (?, ?, ?)
2018-08-24 15:30:22.708 DEBUG 8972 --- [nio-8080-exec-3] org.hibernate.SQL                        : insert into kts_owner.signed_documents_signers (esign, sign_order, doc_id, signer_id) values (?, ?, ?, ?)
Hibernate: insert into kts_owner.signed_documents_signers (esign, sign_order, doc_id, signer_id) values (?, ?, ?, ?)
2018-08-24 15:30:22.735 DEBUG 8972 --- [nio-8080-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper   : could not execute statement [n/a]

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