Mar*_*ila 6 hibernate jpa jpa-2.0
我们想@OneToOne
使用外键创建单向映射,该外键不在主表中,而在从表中。通过提供以下Java代码,Hibernate尝试product_ID
在表中查找列,product
但不在中查找列productimage
。是否可以使其仅对注释进行修改?
该示例中删除了所有不必要的字段和列。
JPA实体:
@Entity
public class Product {
@Id
@Column(name = "ID", unique = true)
private String id;
// this doesn't work
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "product_ID", nullable = false)
private ProductImage productImage;
// this works, but we want one-to-one
// @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
// @JoinColumn(name = "product_ID", nullable = false)
// private List<ProductImage> productImages;
// getters/setters omitted
}
@Entity
public class ProductImage {
@Id
@Column(name = "ID", unique = true)
private String id;
@Column
@Lob
private Blob data;
// getters/setters omitted
}
Run Code Online (Sandbox Code Playgroud)
数据库表:
CREATE TABLE `product` (
`ID` varchar(255) NOT NULL,
PRIMARY KEY (`ID`)
)
CREATE TABLE `productimage` (
`ID` varchar(255) NOT NULL,
`data` longblob NOT NULL,
`product_ID` varchar(255) NOT NULL,
PRIMARY KEY (`ID`),
KEY `FK_123` (`product_ID`),
CONSTRAINT `FK_123` FOREIGN KEY (`product_ID`) REFERENCES `product` (`ID`)
)
Run Code Online (Sandbox Code Playgroud)
@OneToOne 有点误导。它很可能与您想要的不同。在大多数情况下,经典数据库“一对一”关系是通过 @ManyToOne JPA 注释建模的。尝试一下。通过 @ManyToOne 和 @JoinColumn 的单向关系从来没有遇到过问题。我还在第二个类中明确指定了productId 字段。
归档时间: |
|
查看次数: |
2411 次 |
最近记录: |