JPA 2.0을 사용하여 Hibernate 4.3.5에서 최대 절전 모드를 사용하여 테이블을 자동 생성하려고했습니다.JPA 2.0 (Hibernate)은 @JoinTable을 사용하여 @OneToMany에 대한 잘못된 조인 테이블 PK를 생성합니다.
내 연락 엔티티에 다음과 같은 항목을 만들었습니다
/**
* Address
*/
@Valid
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "contact_address", joinColumns = @JoinColumn(name = "contact_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "address_id", referencedColumnName = "id"))
@OrderColumn
private List<Address> addresses;
최대 절전 모드가 제대로 접촉 테이블을 만드는 것입니다,하지만 조인 테이블은 올바른 PK없이 생성됩니다
CREATE TABLE `contact_address` (
`contact_id` bigint(20) NOT NULL,
`address_id` bigint(20) NOT NULL,
`addresses_order` int(11) NOT NULL,
PRIMARY KEY (`contact_id`),
UNIQUE KEY `UK_mvvtppjfu6d0lcjm83u5youn8` (`address_id`),
CONSTRAINT `FK_4fntyt0q2l6vkfg7t38pg4i94` FOREIGN KEY (`contact_id`) REFERENCES `contact` (`id`),
CONSTRAINT `FK_mvvtppjfu6d0lcjm83u5youn8` FOREIGN KEY (`address_id`) REFERENCES `address` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
여기에 나열된 PK는 contact_id
이며 올바르지 않습니다. 그러면 여러 주소를 할당 할 수 없습니다. 오히려 PK는 contact_id
, address_id
의 복합 PK 여야합니다.
최대 절전 모드가 잘못되었거나 JPA 주석에 문제가 있습니까? 이것은 일방적 인 연관입니다.
기술적으로 말하면, @OneToMany에 대한 조인 테이블이 필요하지는 않지만 다른 엔티티 개체에서 Address 엔티티를 사용해야 할 경우 사용하기에 더 깨끗합니다. 모든 연결에 대한 테이블을 조인하십시오.
@ManyToMany 연관을 사용하여 솔루션을 해킹하고 조인 열에 고유 제한 조건을 지정하는 데 어려움을 겪었습니다.하지만 JPA에 문제가 있는지 또는 최대 절전 모드 버그인지 이해하려고합니다.
왜 OneToMany 관계에 JoinTable이 필요합니까? ManyToMany는 내가 아는 한 JoinTable이 필요합니다. – shazin
질문에 그것을 지정하지 않았지만 여러 다른 엔터티에서 Address 개체를 사용해야합니다. 따라서 OneToMany 일지라도 여기에서 조인 테이블을 사용하는 것이 더 명확합니다. –