hibernate - 禁用MySQLIntegrityConstraintViolationException

时间:2014-10-28 08:26:40

标签: java hibernate

有没有办法在INSERT / DELETE期间禁用它?

情况: 我有一个masterDB和一个library1DB和library2DB。

library1DB和library2DB是两个独立的数据库,但具有相同的模式,因为每个库必须拥有自己的数据库。现在我们有了一个masterDB,这是所有库(library1DB和library2DB)中所有数据的聚合版本,仍然记录它们各自的id并将它们映射到它们的库id。

这是masterDB中我的书模型的结构吗?

Book.java

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long masterId;

@Column
private long id;

@Column
private String title;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "book")
private List<BookCoverHistory> bookCoverHistory;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "LIBRARY_ID")
private Library library;

这一切都很好。

然而,当我插入数据时,在我的BookCoverHistory中,我得到了以下例外。

BookCoverHistory.java

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long masterId;

    @Column
    private long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "BOOK_ID")
    private Book book;

    @Column
    private String desc;

以下是例外:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`master_db`.`book_cover_history`, CONSTRAINT `FK_10ggatm9ptqayo4naj23329rc` FOREIGN KEY (`book_id`) REFERENCES `book` (`master_id`))

所以我想,我只是禁用约束,因为我不是非常具体,因为我只是将我的库上的数据聚合到我的masterDB,并且不会手动进行CRUD操作,而只是通过同步过程。 / p>

1 个答案:

答案 0 :(得分:0)

你不能在hibernate中禁用约束检查,因为hibernate显示了一个最初由数据库抛出的错误。

您可能正在使用相同的数据库连接来插入数据。但正如您所说,您有多个数据库,您需要为其他数据库获取连接/会话。如果表格定义明确,您可以插入而不参考其他书籍。

此外,您需要删除联接,因为这些联接仅适用于同一列中的表。如果这些表不共享同一个数据库(以及会话),则需要手动加入Books和Covers。