spring - 如何使用 Spring JPA 仅获取实体的选定属性?

标签 spring hibernate spring-boot jpa spring-data-jpa

我在我的项目中使用 Spring Boot (1.3.3.RELEASE) 和 Hibernate JPA。我的实体如下所示:

@Data
@NoArgsConstructor
@Entity
@Table(name = "rule")
public class RuleVO {

    @Id
    @GeneratedValue
    private Long id;

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

    @Column(name = "tag", length = 256)
    private String tag;

    @OneToMany(mappedBy = "rule", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<RuleOutputArticleVO> outputArticles;

    @OneToMany(mappedBy = "rule", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<RuleInputArticleVO> inputArticles;
}

我的存储库如下所示:

@Repository
public interface RuleRepository extends JpaRepository<RuleVO, Long> {
}

在某些情况下,我只需要获取实体 RuleVO 的 idname 属性。我怎样才能做到这一点?我发现一个通知应该可以使用 Criteria API 和 Projections 但如何?提前谢谢了。沃杰科技

最佳答案

更新:

正如已经向我指出的那样,我很懒,这可以很好地完成,因此我在网上查看了一个合适的答案后更新了我的答案。

这是一个如何获取 only id 和 only 名称的示例:

@Repository
public interface RuleRepository extends JpaRepository<RuleVO, Long> {

    @Query("SELECT r.id FROM RuleVo r where r.name = :name") 
    List<Long> findIdByName(@Param("name") String name);

    @Query("SELECT r.name FROM RuleVo r where r.id = :id") 
    String findNameById(@Param("id") Long id);
}

希望此更新对您有所帮助


旧答案:

仅检索特定属性名称/id 是不可能的,因为这不是 spring 的设计方式,也不是任何 SQL 数据库,因为您总是选择作为实体的行。

你可以做的是查询实体中的变量,例如:

@Repository
public interface RuleRepository extends JpaRepository<RuleVO, Long> {

    public RuleVo findOneByName(String name);
    public RuleVo findOneByNameOrId(String name, Long id);
    public List<RuleVo> findAllByName(String name);
    // etc, depending on what you want
}

您可以根据需要修改这些内容。您的需求。您可以通过 Autowiring 的存储库直接调用这些方法

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/第 5.3 节了解更多选项和示例

关于spring - 如何使用 Spring JPA 仅获取实体的选定属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37167422/

相关文章:

java - 过滤延迟初始化集合

java - Tomcat 服务器中的任务期间 JDBC 连接丢失

java - Spring Boot/Thymeleaf 单元测试 : Model attribute does not exist

java - 如何修复 Veracode CWE 117(日志输出中和不当)

mysql - 我无法使用 CRUD 操作将实体插入数据库

java - orphanRemoval=true 双向OneToOne

java - hibernate 插入到选择

java - 使用 JdbcTemplate 在 Spring Boot 中耗尽连接池

spring - 在 Spring/Hibernate 中删除或更新之前验证对象是否存在

java - 线程将随着时间的推移而更新,以尝试避免可能的内存泄漏