我使用Spring MVC和JPA。我想从两个类(表)中加入数据,并通过百日咳html显示两个表中的数据。
这是我要加入的两个类:
@Entity
@Table(name = "package_aud")
public class PackageAudited {
@Column(name="id")
private Integer id;
@Id
@GeneratedValue
@Column(name="rev")
private Integer rev;
@Column(name="revtype")
private Integer revtype;
@OneToOne
@JoinColumn(name = "rev", nullable=true)
private RevisionInfo info;
... more attributes and getters/setters
和
@Entity
@RevisionEntity(RevListener.class)
@Table(name = "revinfo")
public class RevisionInfo {
@Id
@RevisionNumber
@GeneratedValue
@Column(name="rev")
private Integer rev;
@RevisionTimestamp
@Column(name="revtstmp")
private Date revtstmp;
@Column(name="revuser")
private String revuser;
... getters/setters
这是我尝试使用查询加入表的存储库:
public interface PackageAuditedRepository extends
CrudRepository<PackageAudited, Long> {
@Query("SELECT p, c FROM PackageAudited p join p.info c WHERE p.id =:id AND p.rev = c.rev")
List<PackageAudited> findById(@Param("id") Integer id);
html模板的控制器条目:
@PostMapping("/listSelectedPackage")
public String selectedPackage(@RequestParam("packageId") Integer packageId, Model model) {
Iterable<PackageAudited> specificPackageHistory = this.packageAuditedRepository.findById(packageId);
model.addAttribute("specificPackageHistory", specificPackageHistory);
return "/package/listSelectedPackage";
}
用于显示已加入数据的Html模板:
<table class ="center">
<thead>
<tr>
...
</tr>
</thead>
<tbody>
<tr th:each="package : ${specificPackageHistory}">
<td th:text="${package.rev}"> </td>
<td th:text="${package.id}"> </td>
<td th:text="${package.revuser}"></td>
<td th:text="${package.revtstmp}"></td>
</tr>
</tbody>
</table>
当我尝试仅显示PackageAudited类中的数据时,我的代码有效。我的查询没有得到任何结果,我也不确定$ {package.revuser}和$ {package.revtstmp}是否有效。
答案 0 :(得分:0)
仅将PackageAudited作为查询结果:
@Query("SELECT p FROM PackageAudited p join fetch p.info c WHERE p.id =:id")
List<PackageAudited> findById(@Param("id") Integer id);
然后更改您在页面上引用的方式:
<tr th:each="package : ${specificPackageHistory}">
<td th:text="${package.info.rev}"> </td>
<td th:text="${package.id}"> </td>
<td th:text="${package.info.revuser}"></td>
<td th:text="${package.info.revtstmp}"></td>
</tr>
答案 1 :(得分:0)
我已经通过向PackageAudited添加了一个针对RevisionEntity信息的getter并将thymeleaf html更改为:
来解决这个问题th:text="${package.info.?getRevuser()}"
...