リポジトリクラスで、結合したテーブルから取得した結果をObject[]からエンティティに変換するにはどうした良いのでしょうか?
ご教授お願いします。
最終的にTyhmeleafに渡して画面に表示したいです。
<補足>-----------------
具体的にはコントローラから
model.addAttribute("useInputs", useInputs);
とし、「customers/list」の画面(Tyhmeleaf)に渡していますが、
UseInputクラスでないため、
"${useInputs.item_id}"
で値を取得できません。
よろしくお願いします。
UseInputRepository.java
public interface UseInputRepository extends JpaRepository<UseInput, Integer> { @Query("SELECT c.id as id, c.client_id as client_id, c.item_id as item_id, d.use_date, d.use_number as use_number " + "FROM ClientItem c " + "LEFT JOIN c.dayUseList d " + "WHERE c.client_id = :client_id AND d.use_date = :use_date ") List<UseInput> findAllOrderById(@Param("client_id") String userId, @Param("use_date") Date useDate); } 実際の戻り値はList<Object[]>
UseInput Entity
@Data @NoArgsConstructor @AllArgsConstructor @Entity public class UseInput { @Id @GeneratedValue private Integer id; private String client_id; private String item_id; private Date use_date; private Integer use_number; }
ClientItem Entity
@Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "m_client_item") public class ClientItem implements Serializable{ @Id private Integer id; private String client_id; private String item_id; private Integer is_valid; @OneToMany @JoinColumns({ @JoinColumn(name="item_id", referencedColumnName="item_id", insertable = false, updatable = false ), @JoinColumn(name="client_id", referencedColumnName="client_id", insertable = false, updatable = false) }) private List<DayUse> dayUseList; }
DayUse Entity
@Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "t_day_use") public class DayUse{ @Id @GeneratedValue private Integer id; private String item_id; private String client_id; private Date use_date; private Integer use_number; private Date update_date; @ManyToOne @JoinColumns({ @JoinColumn(name="item_id", referencedColumnName="item_id", insertable = false, updatable = false), @JoinColumn(name="client_id", referencedColumnName="client_id", insertable = false, updatable = false) }) private ClientItem is_valid; }
UseInputService
@Service @Transactional public class UseInputService { @Autowired UseInputRepository useInputRepository; public List<UseInput> findAll(String userId, Date useDate) { return useInputRepository.findAllOrderById(userId,useDate); } }
Controller
@GetMapping String list(Model model) { Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); String userId = ((UserDetails)principal).getUsername(); LocalDate kariUseDate = LocalDate.now(); Date useDate= java.sql.Date.valueOf(kariUseDate); List<UseInput> useInputs = useInputService.findAll(userId,useDate); model.addAttribute("useInputs", useInputs); return "customers/list"; }
list.html
<table> <tr th:each="useInputs : ${useInputs}"> <td th:text="${useInputs.item_id}">品名</td> <td th:text="${useInputs.use_number}">使用数</td> </tr> </table>