当前位置: 首页 > 知识库问答 >
问题:

使用带有Spring Data JPA的自定义查询返回自定义对象

白阳煦
2023-03-14
@Entity
@Table(name="message")
public class Message {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "text_id")
    private long id;

    @NotNull
    private String author;

    @NotNull
    private String text;

    @NotNull
    private String recepient;

    public long getId() {return id;}

    public void setId(long id) {this.id = id;}

    public String getAuthor() {return author;}

    public void setAuthor(String author) {this.author = author;}

    public String getText() {return text;}

    public void setText(String text) {this.text = text;}

    public String getRecepient() {return recepient;}

    public void setRecepient(String recepient) {this.recepient = recepient;}

}
@RestController
@RequestMapping("/api")
public class MessageController {

    @Autowired
    private MessageService messageService;

    @GetMapping("/message/{id}")
    public Message getMessageTextById(@PathVariable(value="id") Long id) {
        return messageService.getMessageTextById(id);       
    }

}
@Service
public class MessageServiceImpl implements MessageService {

    @Autowired
    MessageRepository messageRepo;

    @Override
    public Message getMessageTextById(Long id) {        
        return messageRepo.findMessageTextById(id);     
    }

}

下面是存储库类

@Repository
public interface MessageRepository extends JpaRepository<Message, Long> {


    @Query("SELECT m.author, m.text FROM Message m WHERE m.id = :id")
    Message findMessageTextById(@Param("id") Long id);

}

共有1个答案

郜俊健
2023-03-14

如果只想检索某些列,可以使用一个简单的bean类:

public class CustomMessage{
  private String author;
  private String text;

  public CustomMessage(String author, String text) {
    this.author = author;
    this.author = text;
  }
}

然后从存储库返回一个bean实例:

@Query("SELECT new path_to_class.CustomMessage(m.author, m.text) FROM Message m WHERE m.id = :id")

或检索地图:

 @Query("SELECT new map(m.author as author, m.text as text) FROM Message m WHERE m.id = :id")
 类似资料:
  • 1. 简介 分析云作为企业进行全域用户行为数据分析的数据中台,需要满足企业不同业务角色的各类差异化分析需求。 其中,对于企业深度结合业务模式的定制化需求,分析云平台提供了“自定义SQL查询”的功能,支持业务人员自行编辑复杂的 SQL 查询语言,实现对平台数据仓库中最底层的细粒度用户行为数据进行分析操作,以获取当前分析云平台既有数据模型无法覆盖的个性化分析需求的结果。 2. 使用说明 当前 sql

  • 我正在应用程序中使用Hazelcast作为共享映射。我的地图是这样的: 第144行: 这里是我的类: 很酷,在重新编译Hazelcast之后,使用这个新的jar,我可以使用普通SQL访问查询。但对于pagingQueries,我有一些错误。

  • 我正在尝试使用基于自定义列表的自定义创建一个自定义。 自定义对象是名为的类名,其中包含一些用于消息内容、收件人、时间戳和状态(读取、发送等)的字段。 在看了这个问题:用FXML在JavaFX中定制ListView之后,我成功地做到了: null 现在,ConversationCell类: 我不能显示ConversationCellController,但我所能说的是,这是我(在其构造函数中)加载设

  • 我正在使用Hibernate恩维尔斯来审计实体。有可能获得实体的所有版本/修订版,如下所示: 但这需要花费太多时间,因为它将所有表连接在一起(在此示例中为 rev、soup_aud ingredients_aud)。我只需要Soup_AUD的值。 如何使用自定义查询从审计表中选择值? 汤.java: 成分.java:

  • 改变json输出策略 默认使用阿里的fastjson进行json输出 JSON.toJSONString(obj) 如果要更换输出策略,操作方式如下: @Override protected void initApiConfig(ApiConfig apiConfig) { ... // 自定义json格式输出,将null字符串变成"" apiConfig.setJson

  • 网关默认对业务结果进行合并,然后返回统一的格式。 针对alipay.story.find接口,微服务端返回结果如下: { "name": "白雪公主", "id": 1, "gmtCreate": 1554193987378 } 网关合并后,最终结果如下 { "alipay_story_find_response": { "msg": "Succe