我在两个实体< code>A和< code>B之间有< code>@ManyToMany关系,所以Hibernate在数据库中为我创建了一个名为< code>A_B的未映射表,我在java代码中没有相关的实体。此外,我试图使用Criteria API从我的dao中查询那个< code>A_B表。有人能帮我想出一个解决办法吗?我正尝试在< code>Criteria API中做一些类似这个例子的事情:
从A_B中选择 *,其中 A_B.column = id_input;
首先是映射ORM。在JPA(使用JPQL)中,您使用类的字段,因此如果您在类中有关系,您可以使用它在存储库中创建方法名称。示例:
客户实体:
@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
的连接表-使用字段名生成列名。如果要自定义表名或列名,则必须将其映射到客户端实体上:
@ManyToMany
@JoinTable(
name="products_of_client",
joinColumns = @JoinColumn(name="client_id"),
inverseJoinColumns = @JoinColumn(name="product_id")
)
private List<Product> products;
此更改创建具有名称products_of_client
和列名client_id
和product_id
的表。它不会影响存储库中的方法名称
问题内容: 我一直在研究一个非常简单的JPA示例,并试图将其调整为现有数据库。但是我无法克服这个错误。(下面。)这只是我没看到的一些简单的事情。 在下面的DocumentManager类中(一个简单的servlet,因为这是我的目标),它做了两件事: 插入一行 返回所有行 插入效果很好-一切都很好。问题出在检索上。我尝试了各种参数值,但没有走运,并且尝试了各种更复杂的类注释(如列类型),但都没有成
此查询用于检索一对多关系中的最后记录(请参阅SQL连接:选择一对多关系中的最后记录) 我的问题是:如何使用jpa criteria api使用subselect构建这个连接?可能吗?如果没有,可以使用jpql吗? 到目前为止我的代码:
两个数据库表具有外键关系。 它们通过JPA映射到两个实体A和B,但是连接列是从实体中手动删除的,因此在JPA世界中,类A和B是不相关的,您不能通过字段/属性从一个类导航到另一个类。 使用JPA标准API,是否可以创建连接两个表的查询? 我在互联网上找到的所有示例都使用join列来实现目标,但如上所述,它已从代码中删除,因为大多数时候我对A和B之间的关系不感兴趣,而且我担心可能的开销。
我正在将我们的DAO从使用Hibernate Criteria API迁移到JPA Criteria API。我有一个包含多个的类: 在查询中,我使用的是JoinType。左键以消除默认生成的交叉连接: 我得到了正确的结果,所有的A和B记录都得到了正确的检索。然而,在迁移之后,我遇到了一个问题:尽管在生成的查询中使用了左外连接,但所有的记录都是逐个检索的。以前(使用Hibernate Criter
主要内容:创建条件查询的步骤,标准API查询子句的方法标准(Criteria)API是构建实体及其持久状态查询的最常用方法之一。 它只是定义JPA查询的另一种方法。 Criteria API定义了一个独立于平台的条件查询,用Java编程语言编写。 它是在JPA 2.0中引入的。 这背后的主要目的是提供一种类型安全的方式来表达查询。 创建条件查询的步骤 要创建标准查询,请按照以下步骤操作: - 第1步: 通过在接口实例上调用方法创建接口的对象。 第2步