如何应用一个多注释和多个一注释(Java持久性)

如何应用一个多注释和多个一注释(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 (

我有两个表格如下:

表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 (
    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持久化中使用join
column 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)
);