spring 我想要子对象,但我想在Hibernate中通过父字段搜索它们

xggvc2p6  于 5个月前  发布在  Spring
关注(0)|答案(2)|浏览(37)

如何通过父对象的昵称过滤子对象来获取所有子对象?
我有父实体:

import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

@Entity
@Data
@Table(name = "parent")
public class ParentEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Byte id;

    private Integer age;
    
    @Column(columnDefinition = "VARCHAR(100)")
    private String nickname;
}

字符串
我有子实体:

import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

@Entity
@Data
@Table(name = "child")
public class ChildEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private String surname;

    @Column(name = "parent_id", nullable = false)
    private Byte parentId;

    @ManyToOne(targetEntity = ParentEntity.class)
    @JoinColumn(name = "parent_id", updatable = false, insertable = false)
    private ParentEntity parentEntity;
}


我有一个repository:

import com.example.ParentEntity;
import com.example.ChildEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface ChildRepository extends JpaRepository<ChildEntity, String> {
    // I guess something like this but I was not able to figure out
    List<ChildEntity> findAllByParentEntity(String nickname);
}

mf98qq94

mf98qq941#

这将返回所有其父代具有参数中昵称的ChildEntity:

@Query("SELECT c FROM ChildEntity c join c.parentEntity p WHERE p.nickname = :nickname")
List<ChildEntity> retrieveByParentNickName(@Param("nickname") String nickname);

字符串

j8yoct9x

j8yoct9x2#

我建议使用query methods,其中查询直接从方法名称派生,而无需手动编写。
在您的情况下,该方法应定义如下:

List<ChildEntity> findAllByParentEntity_Nickname(String nickname);

字符串

相关问题