如何应用一个多注释和多个一注释(Java持久性)
我有两个表格如下: 表1:如何应用一个多注释和多个一注释(Java持久性),java,mysql,Java,Mysql,我有两个表格如下: 表1: CREATE TABLE `Product` ( `id` int(11) NOT NULL AUTO_INCREMENT, `typename` varchar(255) DEFAULT NULL, `typecode` varchar(55) DEFAULT NULL, ) ENGINE=InnoDB AUTO_INCREMENT=396 DEFAULT CHARSET=latin1; 表2: CREATE TABLE measurements (
CREATE TABLE `Product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`typename` varchar(255) DEFAULT NULL,
`typecode` varchar(55) DEFAULT NULL,
) ENGINE=InnoDB AUTO_INCREMENT=396 DEFAULT CHARSET=latin1;
表2:
CREATE TABLE measurements (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
age_group varchar(20) NOT NULL,
articleType NOT NULL,
dimension text ,
createdOn int(11) NOT NULL,
updatedOn int(11) NOT NULL,
createdBy text NOT NULL,
)ENGINE=InnoDB AUTO_INCREMENT=396 DEFAULT CHARSET=latin1;
现在,我如何在Java持久化中使用joincolumn measurements.articleType=product.typename
连接这两个表
我知道使用一对多和多对一使用外键()的概念。但是上面的表没有外键。您可以使用
JPQL或HQL-Native-SQL
来实现这一点。要使用查询
或命名查询
,您需要将实体关联在一起
因为在您的情况下这是不可能的,所以本机SQL
是唯一的选项
但请考虑在表之间创建<代码>约束< /代码>,以保存<代码>数据完整性< /代码>。
< p>我在这里假设您想要一对多对多。 在java中,如果希望它是双向的,请使用@ManyToMany(mappedBy = "products")
public List<Product> getProducts() { ... }
阅读本文了解更多信息:@francesko如果不在数据库中构建额外的表,它就不能完成吗?不是多对多。通过更改原始表并为外键添加额外的列,可以实现一对多或多对一。
@ManyToMany
@JoinTable(name = "product_measurement")
public List<Measurement> getMeasurement() { ... }
CREATE TABLE product_measurement
(
product_measurement_id int(11) NOT NULL,
measurement_product_id int(11) NOT NULL,
FOREIGN KEY (measurement_product_id) REFERENCES measurement (id),
FOREIGN KEY (product_measurement) REFERENCES product (id)
);