当前位置: 首页 > 知识库问答 >
问题:

如何使用spring data JPA在子类对象上编写查询方法?

谢叶五
2023-03-14

我想通过spring data JPA中的查询方法从子类中获取数据。不想使用jpql或标准API。我想获得所有与指定accountType和User的连接。我知道jpql以及标准api将完成这项工作,但我想用JPA查询方法实现这一点。下面是我的实体和回购代码。

这是主实体类

@Entity
public class Connection {

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(
            name = "UUID",
            strategy = "org.hibernate.id.UUIDGenerator"
    )
    @Column(name = "Connection_Id", nullable = false, updatable = false)
    private String id;

    @Column(name = "User_Id", nullable = false)
    private String userId;

    @Column(name = "Name", nullable = false, length = 64)
    private String name;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "Connection_Type_Id")
    private ConnectionType connectionType;
    
    // default constructor
    
    // getter and setter
    
    }
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class ConnectionType {

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(
            name = "UUID",
            strategy = "org.hibernate.id.UUIDGenerator"
    )
    @Column(name = "Id", nullable = false)
    private String id;

    @OneToOne(mappedBy = "connectionType")
    private Connection connection;
    
    // default constructor
    
    // getter setter
}

@Entity
public class EmailAccount extends ConnectionType {
    
    @Column(name = "Username", nullable = false)
    private String username;
    
    @Column(name = "Password", nullable = false)
    private String password;
    
    
    @Column(name = "Account_Type", nullable = false)
    @Enumerated(value = EnumType.STRING)
    private AccountType accountType;
    
    @Column(name = "FullName")
    private String fullName;
    
    // default constructor
    
    // getter setter
    
}

@Entity
public class OtehrAccount extends ConnectionType {

    @Column(name = "Client_Id", nullable = false)
    private String clientId;
    
    @Column(name = "Client_Secret", nullable = false)
    private String secret;
    
    // default constructor
    
    // getter and setter
    
}

下面是存储库

public interface ConnectionRepository extends JpaRepository<Connection, String> {

    // Query Method that i want to write but is not valid.
    List<Connection> findByUserIdAndconnectionTypeAccountType(String userId, AccountType accountType);

}

repo中的findByUserIdAndconnectionTypeAccountType方法不正确,所以我只想知道天气如何,是否可以根据子类属性编写得到结果的方法?

共有1个答案

钱安和
2023-03-14

为了澄清一下,“JPA查询方法”实际上是“Spring Data JPA查询方法”,所以这不是Hibernate问题。在JPQL/HQL中,这种子类型访问通常通过使用treat运算符来工作,或者在HQL中,它也隐式地工作。由于Spring Data JPA文档没有提到treat操作符,所以我认为这是不可能的:https://docs.Spring.io/Spring-Data/JPA/docs/current/reference/html/#repositories.query-methods.query-creatation

 类似资料:
  • 我想写这样的东西: 正如你所看到的,我不能只写像<代码>这样的东西。文档(id),因为我使用了查询对象(where调用)。 我已经看到了这个问题的一些答案,但不是Java。事实上: https://stackoverflow.com/a/52252264/6500085

  • 问题内容: 我有此查询,它运行良好 从此查询中,我从我的位置(这是我的第一张表)中选择所有3 KM的餐厅。 但是我需要从3Km中的食品接头中选择AVG等级。 该查询也运行完美: 但是我需要添加这两个查询,通过它们我可以选择所有那些食品接头及其等级AVG。 问题答案: 只需放置子查询,您将得到结果:

  • 我必须得到特定的数据,如"角色"表已提交状态,我需要状态=1,所有数据从角色表

  • 问题内容: 我在将下面的SQL转换为Zend Db查询时遇到了一些问题。 我之前已经了解了代码-但Zend Db无法正确生成查询。谁能告诉我我想念的东西吗? SQL确实可以正常工作。我想使用Zend Paginator功能来使用Zend Db重写它。 任何帮助是极大的赞赏。 J 问题答案: 这个: 给出以下内容:

  • 问题内容: 谁能帮助我获取下面提到的JPA查询的JPA标准查询。 问题答案: 假设Person与语言有关,这就是您在较早的Hibernate中所做的事情: 我第一次尝试使用JPA 2.0: 请让我知道这是否适合您。 编辑: 更新查询以仅使用一个呼叫。

  • 问题内容: 我有以下sql查询,如何使用yii编写查询? 我没有使用,暂时正在避免使用它。 使用三个表,用户,类别和job_profile。 我已经编写了以下查询,但是我不知道如何包括join: 问题答案: $model = JobProfile::model()->with(‘userrelationname’,’categoryrelationname’)->findAll(array(“co