gpt4 book ai didi

java - Spring Data JPA 通过查询从实体获取投影

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:01:13 26 4
gpt4 key购买 nike

在我的应用程序中,我有一个英雄实体。我还希望能够返回每个英雄 ID 和名称的列表。我得到了它的工作:

@Repository
public interface HeroEntityRepository extends JpaRepository<HeroEntity, Long> {
@Query("select s.id, s.name from HEROES s")
List<Object> getIdAndName();
}

// in controller:
@GetMapping
public List<Object> getHeroNames() {
return heroEntityRepository.getIdAndName();
}

我在另一篇文章中尝试了用接口(interface)替换对象的建议,但随后我收到了一个空值列表([{"name":null,"id":null},{"name":null, "id":null},//等)。自定义界面:

public interface HeroNameAndId {

Long getId();
String getName();
}

当创建一个只有 id 和 name 值的实体时,我收到了“ConverterNotFoundException”。我不确定正确的方法是什么。我让它与 Object 一起工作,但这看起来不是很干净。

我的英雄实体:

@Getter
@Builder
@Entity(name = "HEROES")
@AllArgsConstructor
public class HeroEntity extends HasId<Long> {

private String name;
private String shortName;
private String attributeId;

@ElementCollection private List<String> translations;

@OneToOne(cascade = CascadeType.ALL) private HeroIconEntity icon;

private String role;
private String type;
private String releaseDate;

@OneToMany(cascade = CascadeType.ALL) private List<AbilityEntity> abilities;

@OneToMany(cascade = CascadeType.ALL) private List<TalentEntity> talents;
}

@MappedSuperclass
public abstract class HasId<T> {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Setter
@Getter
private T id;
}

最佳答案

您必须使用字段别名来使@Query 具有投影功能:

@Query("select s.id as id, s.name as name from HEROES s")

别名必须与您的 HeroNameAndId 接口(interface)中的名称相匹配。

关于java - Spring Data JPA 通过查询从实体获取投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51609025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com