【问题标题】:Use WHERE in JPA to query the entity在 JPA 中使用 WHERE 查询实体
【发布时间】:2019-01-02 01:49:03
【问题描述】:

我有这个实体:

@Entity
@Table
public class Terminals implements Serializable {

    private static final long serialVersionUID = 5288308199642977991L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

    @Column
    private int merchant_id;

    @Column
    private String terminalToken;

.....
}

我尝试使用此查询:

public Terminals getTerminalToken(String terminalToken) throws Exception {
        return entityManager.find(Terminals.class, terminalToken);
    }

看起来它只选择了表格键。

如何选择表格列terminalToken

【问题讨论】:

  • 您可以简单地创建一个查询。 entityManager.createQuery( "SELECT t FROM Terminals t WHERE t.terminalToken=:terminalToken").setParameter(...).getResultList();
  • 你能告诉我如何使用 Java 代码而不是 HQL 字符串吗?
  • 如果你想使用JpaRepository,你只需要定义一个List<Terminals> findByTerminalToken(String token)方法。
  • EntityManager#find 被定义为只搜索主键,我想知道你为什么期望它做其他事情。
  • @PeterPenzov(和其他人):这不是 HQL。是 JPQL。

标签: java jpa spring-data-jpa jpa-2.1


【解决方案1】:

如果您正在寻找纯 Java(我更支持 Philipp 解决方案),也许您希望查看此解决方案。 https://www.objectdb.com/java/jpa/query/criteria。很抱歉没有发布直接的解决方案,但我认为给你源更值得。

对了,为什么不使用spring数据呢?更容易

【讨论】:

  • 你能给我看一下Spring数据的代码示例吗?
  • 基本上我会使用 spring initilz (start.spring.io) 添加依赖项:JPA×PostgreSQL 然后添加您的实体。然后添加一个名为 repositories 的包,按照 spring.io/guides/gs/accessing-data-jpa 中提到的内容,repositories 内的接口成为强大的工具.. ;-)
  • 那么 Web UI 将调用 JPA 存储库 -> 将调用 HQL 代码?
  • 是的。如果这当然是你需要的。如果不是 web 应用程序 spring boot 和 spring 数据可能太多......所以,这取决于你是否正在构建 web 应用程序,如果你正在尝试使用 java 等。
【解决方案2】:

您最好使用Spring dataJPA Repositories 来构建您的查询。您只需要扩展JpaRepository 接口,并遵循命名约定来命名您的方法。

您的方法将如下所示:

public List<Terminal> findByTeminalToken(String TerminalToken);

否则您将需要使用entityManager.createQuery() 方法而不是entityManager.find(),因为后者仅与id 列一起使用。

【讨论】:

  • 我不知道切换到(不同的)框架是否是一种选择。但如果是这样,我同意你的建议 - Spring data。
  • @Philipp 好吧,我们不知道这是否是一个选择,但它确实非常强大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 2022-01-06
  • 2015-08-14
  • 2020-07-19
  • 1970-01-01
相关资源
最近更新 更多