相关疑难解决方法(0)

获取整个树的JPA查询

我有一个模拟所有类别的类,它们可以按层次排序.

@Entity
@Table(name="categories")
public class Category {
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequence")
    @SequenceGenerator(name="sequence", sequenceName="categories_pk_seq", allocationSize=1)
    @Column(name="id")
    private Long id;

    @Column
    private String name;

    @OneToOne
    @JoinColumn(name="idfather")
    private Category father;

}
Run Code Online (Sandbox Code Playgroud)

我需要按层次顺序排列所有类别(我的意思是每个父亲后跟其子级和父级按字母顺序在每个级别上排序),因为它们可以在例如Oracle中的PRIOR中制作.是否可以使用JPA查询(而不是SQL查询)执行此操作?

谢谢.

java persistence hibernate jpa

8
推荐指数
1
解决办法
1万
查看次数

Hibernate 3.6:SQL方言中的registerFunction不起作用

我放弃并问社区......

在我的项目中,我使用的是Hibernate 3.6.4.Final和自定义sql方言:

public class ServiceAppMySQL5InnoDBDialect extends MySQL5InnoDBDialect {

    public ServiceAppMySQL5InnoDBDialect() {
        super();
        registerFunction("bitwise_and", new SQLFunctionTemplate(StandardBasicTypes.INTEGER, "(?1 & ?2)"));
        registerFunction("hasflags", new SQLFunctionTemplate(StandardBasicTypes.BOOLEAN, "?1 & ?2 = ?2"));
    }

}
Run Code Online (Sandbox Code Playgroud)

hasflags在HQL查询中使用该方法失败.这是查询:

Query q = em
        .createQuery(
            "SELECT o FROM "
            + entityClass.getName()
            + " o WHERE hasflags(o.status, :status) AND o.email = :email")
        .setParameter("email", username)
        .setParameter("status", status.getBitmask());
Run Code Online (Sandbox Code Playgroud)

错误:

Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: ( near line 1, column 50 [SELECT o FROM tv.px.domain.Owner o WHERE hasflags(o.status, :status) AND o.email = …
Run Code Online (Sandbox Code Playgroud)

hibernate hql dialect

6
推荐指数
1
解决办法
5968
查看次数

JPQL 和 JPA 中的本机查询“GROUP_CONCAT”是否有替代方案?

我正在尝试使用 jpql 和 JPA 来获取配置文件的配置文件菜单。我的“个人资料”和“个人资料菜单”实体具有多对一的关系。

我尝试过研究这些答案,但找不到任何可行的解决方案。

如何在Spring Boot应用程序中添加非标准化sql函数?

使用 JPA 和 Hibernate 注册 SQL 函数

https://vladmihalcea.com/hibernate-sql-function-jpql-criteria-api-query/

我也浏览了这个链接,似乎和我有同样的问题, How to register non-standardized SQL function Manual in Spring Boot application?

使用本机查询时,我可以使用以下查询获取数据:

 SELECT
 GROUP_CONCAT(pm.user_menu_id SEPARATOR ',')
 AS profile_menu_ids,
 p.description
 FROM profile p
 LEFT JOIN profile_menu pm ON p.id = pm.profile_id
 WHERE
 p.id =:profileId
 AND
 pm.status = 'Y'
 GROUP BY p.id
Run Code Online (Sandbox Code Playgroud)

上述查询为我提供的数据为,

个人资料菜单 ID 描述
4,5 管理员简介

jpql 和 JPA 中是否有任何方法或替代方案来获得上述结果?

java mysql jpa jpql spring-boot

5
推荐指数
1
解决办法
5069
查看次数

如何在 Spring Boot 应用程序中手动注册非标准化 SQL 函数?

我在当前的 spring-boot 项目中使用 JPA 查询。如何添加非标准化 SQL 函数,如GROUP_CONCAT

之前,我以前的问题: 如何在 JPA 查询中的一行逗号分隔列表中显示列结果

我发现 GROUP_CONCAT 不是 JPA 查询中的注册函数,但可以通过手动注册来访问它。我已经尝试过以下链接,但对我不起作用:

如何在 Spring Boot 应用程序中添加非标准化的 sql 函数?

使用 JPA 和 Hibernate 注册 SQL 函数

https://thoughts-on-java.org/database-functions/

https://vladmihalcea.com/hibernate-sql-function-jpql-criteria-api-query/

1.

public class SqlFunctionsMetadataBuilderContributor
        implements MetadataBuilderContributor {

    @Override
    public void contribute(MetadataBuilder metadataBuilder) {
        metadataBuilder.applySqlFunction(
                "group_concat",
                new StandardSQLFunction(
                        "group_concat",
                        StandardBasicTypes.STRING
                )
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

2.

 public String render(Type firstArgumentType, List arguments, SessionFactoryImplementor factory)
            throws QueryException {
        if (arguments.size() < 1) {
            throw new QueryException(new IllegalArgumentException("group_concat should have at …
Run Code Online (Sandbox Code Playgroud)

java mysql spring jpa jpql

1
推荐指数
2
解决办法
1982
查看次数

标签 统计

java ×3

jpa ×3

hibernate ×2

jpql ×2

mysql ×2

dialect ×1

hql ×1

persistence ×1

spring ×1

spring-boot ×1