2017-12-04 1 views
0

Ich arbeite mit Spring MVC und JPA. Ich möchte die Daten aus zwei Klassen (Tabellen) zusammenfügen und Daten aus beiden Tabellen über thymeleaf html anzeigen. Verbinden Sie zwei Tabellen und zeigen Sie die abgerufenen Informationen in thymeleaf

Dies sind die beiden Klassen I anschließen möchten:

@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 

Und

@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 

Dies ist das Repository ist, wo ich versuche, die Tabellen mit einer Abfrage zu verbinden:

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); 

Controller-Eintrag für die HTML-Vorlage:

@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-Vorlage der verbundenen Daten zeigen:

<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> 

Mein Code funktioniert, wenn ich versuche, nur die Daten aus der PackageAudited Klasse zu zeigen. Meine Abfrage bringt keine Ergebnisse und ich bin mir auch nicht sicher, ob $ {package.revuser} und $ {package.revtstmp} funktionieren.

+0

Ich denke, diese Frage hilft, https://StackOverflow.com/questio ns/43922501/feder-jpa-hibernate-how-to-perform-verbinden-von-zwei-entities-in-one-repository – akhilsk

Antwort

0

ich es gelöst habe einen Getter für RevisionEntity info, indem zu PackageAudited und Ändern der Thymeleleaf HTML zu:

th:text="${package.info.?getRevuser()}" 
... 
0

nur die PackageAudited als Abfrageergebnis Put:

@Query("SELECT p FROM PackageAudited p join fetch p.info c WHERE p.id =:id") 
List<PackageAudited> findById(@Param("id") Integer id); 

Dann, wie Sie auf der Seite beziehen sich ändern:

<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> 
+0

Vielen Dank für Ihre Antwort. Ich habe meinen Code aktualisiert. Jetzt bekomme ich noch einen Fehler von thymeleaf: Es gab einen unerwarteten Fehler (Typ = Interner Server Fehler, Status = 500). Exception Auswertung SpringEL Ausdruck: "package.info.rev" (/ Paket/listSelectedPackage: 77) – mroe

+0

aktualisiert den Beitrag –

+0

Ich bekomme immer noch den gleichen Fehler: Es gab einen unerwarteten Fehler (Typ = Interner Serverfehler, Status = 500). Ausnahme auswerten SpringEL Ausdruck: "package.info.rev" Ich bekomme den Fehler auch mit *. Revuser und *. Revtstmp – mroe

Verwandte Themen