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

如何使用jpa和Hibernate-Springboot访问查询中的子元素

卫沈义
2023-03-14

子级有一个名为name的参数。因此,我希望使用像“%name%”一样进行查询,这样查询就会返回一个包含查询找到的所有子项的列表。

我想做这样的事情:

@Query("select c from Parent c where lower(c.name) LIKE lower(CONCAT('%', :name, '%')) ")
    List<Parent> findByNameLIKE(@Param("name") String name);

但是使用一个父级的子级,我会使用父级的id来搜索它。我不知道我是不是解释得很好,问题是我还没能实现班与班之间的衔接。

@Entity(name = "Compania")
@Table(
    name = "compania"
)
public class Compania {
    @Id
    @SequenceGenerator(
        name = "compania_sequence",
        sequenceName = "compania_sequence",
        allocationSize = 1
    )
    @GeneratedValue(
        strategy = GenerationType.AUTO,
        generator = "compania_sequence"
    )
    @Column(
        nullable = false
    )
    private Long id;


    @Column(
        name = "name",
        nullable = false,
        unique = true
    )
    private String name;

    @Column(
        name = "bajas"
    )
    private String bajas;

    @OneToMany(
        cascade = CascadeType.ALL,
        fetch = FetchType.LAZY,
        orphanRemoval = true
    )
    private List<DefaultGroup> default_group;
@Entity
@Table
public class DefaultGroup {
    @Id
    @SequenceGenerator(
        name = "defaultGroup_sequence",
        sequenceName = "defaultGroup_sequence",
        allocationSize = 1
    )
    @GeneratedValue(
        strategy = GenerationType.SEQUENCE,
        generator = "defaultGroup_sequence"
    )
    @Column(
        nullable = false
    )
    @JsonIgnore
    private Long id;

    @Column(
        name = "idRef",
        nullable = false
    )
    private int idRef;

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

    @Column(
        name = "path"
    )
    private String path;

    @ManyToOne()
    private Compania compania;

因此,我希望将defaultGroups分配给id为1的Compania,其中defaultGroup的名称类似于%x%。而我不知道如何做到这一点。谢了!

共有1个答案

竺勇
2023-03-14

如果在父实体父实体中有子实体,如下所示:

@Entity
class Parent {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    
    ...

    @OneToMany(mappedBy = "parent")
    private List<Child> childs;

    ....

然后可以使用如下查询:

@Repository
public interface ParentRepository extends JpaRepository<Parent, Long> {
    List<Parent> getAllByChildsNameLike(String childName);
}

spring数据将为您生成查询。

@Repository
public interface ChildRepository extends JpaRepository<Child, Long> {
    List<Child> getAllByParentIdAndNameLike(Long parentId, String name);
}
@Query("select c from Child c where c.parent.id = ?1 and c.name like ?2")
List<Child> getChilds(Long parentId, String name);

 类似资料:
  • 选择e from(从表中选择e name e order by e.refid desc)作为表名e,其中(rownum)介于:satrt和:end之间 我得到的错误为"org.hibernate.hql.internal.ast.QuerySynTaxExcema:意外令牌:(近第1行,第15列" Hibernate查询:从table_name其中rownum之间:start和:end顺序由re

  • 问题内容: 我正在使用Hibernate对数据库进行一些大查询,有时会遇到超时问题。我想避免在每个或上手动设置超时。 我可以为Hibernate配置提供任何属性,为我运行的所有查询设置可接受的默认值吗? 如果没有,如何在Hibernate查询上设置默认超时值? 问题答案: JPA 2定义了 javax.persistence.query.timeout 提示以指定默认超时(以毫秒为单位)。Hibe

  • 我的ParkingLotEntity: 我的Jpa存储库接口 上面的两个方法运行良好,但问题是我还需要从结果集到第二个方法“GetAllParkingLotCurrentlyWorkingInRegionOfRadius”中的位置的任何停车场之间的距离!在SQL Server中,我的定义函数已经计算出了距离。方法2的结果集是成功的,但没有返回距离(这是我的需要),只是一组parkingLotEnt

  • 问题内容: 我正在尝试将我的命名查询放入orm.xml(与persistence.xml一起放入META-INF中),但是hibernate / jpa似乎忽略了我的orm.xml。 当我尝试使用em.createNamedQuery(“ myQuery”)创建命名查询时,它返回找不到该查询的信息。 我使用注释,我想在orm.xml中外部化我的命名查询(仅此)。 这是我的persistence.x

  • 我一直在使用带有hibernate的JPA 2.0作为我的网络应用程序的供应商。对于其中一个数据库查询,我使用JPA标准生成器API来构造动态查询。我已经能够让它像预期的那样工作了。 查询在两个表A之间有一个读取连接 我还使用setMaxResults来限制返回给用户的记录数 仅供参考,数据库中大约有400条记录。 当我在日志中看到查询结果时,我看到它加载了内存中的所有400条记录。但是,由于设置