有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用jpa和hibernate SpringBoot访问查询中的子元素

我想知道如何在Spring boot中使用一些子对象的名称作为参数来查询它们

比如说,我有一个班级家长,与孩子有一对多的关系

子级有一个名为name的参数。因此,我希望使用like "%name%"进行查询,以便查询将返回一个包含查询找到的所有子级的列表

我想这样做:

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

但是使用一位家长拥有的孩子,我会使用家长的id来搜索它。我不知道我是否解释得很好,问题是我无法实现类之间的连接

谢谢

编辑。以下是我的课程:

Compania

@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;

因此,我希望将defaultGroup分配给id为1的Companyia,其中defaultGroup的名称类似于%x%。我不知道如何实现这一点。谢谢


共 (1) 个答案

  1. # 1 楼答案

    如果在父实体Parent中有一个Child实体,如下所示:

    @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数据将为您生成查询


    如果我们想通过id和其他约束条件获得父母的孩子,我们可以这样做:

    @Repository
    public interface ChildRepository extends JpaRepository<Child, Long> {
        List<Child> getAllByParentIdAndNameLike(Long parentId, String name);
    }
    

    或者,如果您想在ParentRepository中使用jpa查询:

    @Query("select c from Child c where c.parent.id = ?1 and c.name like ?2")
    List<Child> getChilds(Long parentId, String name);
    

    可以用实体替换childs字段和实体