加入两个表并在百里香中显示检索到的信息

时间:2017-12-04 13:48:02

标签: java mysql spring join spring-data-jpa

我使用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}是否有效。

2 个答案:

答案 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()}"
...