如何解决如何在JPA中为ElementCollection的列创建外键?
给出以下类模型:
package demo;
import java.util.Map;
import java.util.Set;
import javax.persistence.*;
@Embeddable
class Address {
String street;
}
@Embeddable
class AddressDetails {
byte[] photo;
}
@MappedSuperclass
abstract class User {
@Id Long id;
@ElementCollection(fetch = FetchType.EAGER) Set<Address> addresses;
@ElementCollection Map<Address,AddressDetails> addressDetails; // wanted: FK to addresses
}
@Entity
class Sub1 extends User {}
@Entity
class Sub2 extends User {}
我正试图告诉JPA,addressDetails
引用了addresses
中的行。我该怎么办?
这是我想转换为注释的外键约束:
ALTER TABLE sub1_address_details
ADD CONSTRAINT FK_sub1_address_address_details
FOREIGN KEY (sub1_id,address_id)
REFERENCES sub1_addresses
ON DELETE CASCADE;
这是 Hibernate当前生成的外键约束:
alter table vblife_pv.sub1_addresses
add constraint FKdm58cvoq5gqndtlpr4t7auyct
foreign key (sub1_id)
references sub1
我尝试添加
@CollectionTable(joinColumns = {@JoinColumn(table = "addresses",referencedColumnName = "id")})
更改为addressDetails
,但这不会更改Hibernate的DDL输出。
我正在使用Hibernate 5.4.21。
解决方法
如果您确实希望这样做,则可能应该使用以下内容:
@Entity
@Table(name = "addresses")
public class UserAddress {
@EmbeddedId
UserAddressId id;
@ManyToOne(LAZY)
@JoinColumn(name = "address_id",insertable = false,updatable = false)
Address address;
@ManyToOne(LAZY)
@JoinColumn(name = "user_id",updatable = false)
User user;
@OneToOne(mappedBy = "userAddress")
AddressDetails details;
}
@Embeddable
public class UserAddressId {
int addressId;
int userId;
}
@Entity
@Table(name = "address_details")
public class AddressDetails {
@EmbeddedId
UserAddressId id;
@OneToOne
@JoinColumns({
@JoinColumn(name = "user_id",referencedColumn = "user_id",updatable = false),@JoinColumn(name = "address_id",referencedColumn = "address_id",updatable = false)
})
UserAddress userAddress;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。