JPA:如何使用条件 API 管理未映射的 Table
JPA : How to manage unmapped Table using Criteria API
我在两个实体 A
和 B
之间有 @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_id
和 products_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_id
和 product_id
。它不影响存储库中的方法名称
我在两个实体 A
和 B
之间有 @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_id
和 products_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_id
和 product_id
。它不影响存储库中的方法名称