JPA:如何使用条件 API 管理未映射的 Table

JPA : How to manage unmapped Table using Criteria API

我在两个实体 AB 之间有 @ManyToMany 关系,所以 Hibernate 为我创建了一个未映射的 table 命名为 A_B 到数据库中我的 java 代码中没有相关实体。另外,我正在尝试使用 Criteria API 从我的 dao 中查询 A_B table。有人可以帮我找出解决方案吗?我正在尝试在 Criteria API:

中做类似这个例子的事情

select * from A_B where A_B.column = id_input;

首先是映射ORM。在 JPA(使用 JPQL)中,您使用 classes 的字段,因此如果您在 class 中有关系,则可以使用它在存储库中创建方法名称。示例:

客户端实体:

@Entity
public class Client {

@Id
@GeneratedValue
private Long id;
private String name;
private String description;

}

以及带有标记的产品实体,该关系是从客户端实体映射的

@Entity
public class Product {

@Id
@GeneratedValue
private Long id;
@Column(name="name")
private String productName;
private String description;

@ManyToMany(mappedBy="products")
private List<Client> clients;

}

现在按产品名称查找客户的存储库:

@Repository
public interface ClientRepository extends JpaRepository<Client, Long>{

List<Client> findByProducts_ProductName(String name);

}

以上示例使用名称 client_products 和列 clients_idproducts_id 创建联接 table - 使用字段名称生成列名称。 如果你想自定义 table 名称或列名,你必须将其映射到客户端实体:

@ManyToMany
@JoinTable(
        name="products_of_client",
        joinColumns = @JoinColumn(name="client_id"),
        inverseJoinColumns = @JoinColumn(name="product_id")
        )
private List<Product> products;

此更改创建 table,名称为 products_of_client,列名称为 client_idproduct_id。它不影响存储库中的方法名称