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

xggvc2p6  于 2024-01-05  发布在  Spring
关注(0)|答案(2)|浏览(139)

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

  1. import jakarta.persistence.*;
  2. import lombok.Data;
  3. import org.hibernate.validator.constraints.Length;
  4. @Entity
  5. @Data
  6. @Table(name = "parent")
  7. public class ParentEntity {
  8. @Id
  9. @GeneratedValue(strategy = GenerationType.IDENTITY)
  10. private Byte id;
  11. private Integer age;
  12. @Column(columnDefinition = "VARCHAR(100)")
  13. private String nickname;
  14. }

字符串
我有子实体:

  1. import jakarta.persistence.*;
  2. import lombok.Data;
  3. import org.hibernate.validator.constraints.Length;
  4. @Entity
  5. @Data
  6. @Table(name = "child")
  7. public class ChildEntity {
  8. @Id
  9. @GeneratedValue(strategy = GenerationType.IDENTITY)
  10. private Integer id;
  11. private String name;
  12. private String surname;
  13. @Column(name = "parent_id", nullable = false)
  14. private Byte parentId;
  15. @ManyToOne(targetEntity = ParentEntity.class)
  16. @JoinColumn(name = "parent_id", updatable = false, insertable = false)
  17. private ParentEntity parentEntity;
  18. }


我有一个repository:

  1. import com.example.ParentEntity;
  2. import com.example.ChildEntity;
  3. import org.springframework.data.jpa.repository.JpaRepository;
  4. import org.springframework.stereotype.Repository;
  5. import java.util.List;
  6. @Repository
  7. public interface ChildRepository extends JpaRepository<ChildEntity, String> {
  8. // I guess something like this but I was not able to figure out
  9. List<ChildEntity> findAllByParentEntity(String nickname);
  10. }

mf98qq94

mf98qq941#

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

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

字符串

j8yoct9x

j8yoct9x2#

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

  1. List<ChildEntity> findAllByParentEntity_Nickname(String nickname);

字符串

相关问题