3 Stimmen

wie man find() oder findById() Methoden für embeddedId im Play Framework implementiert

Ich habe mit Play Framework in letzter Zeit für die Erstellung von Projekt gearbeitet, vielen Dank für meine Freunde in diesem Forum für Ihre Hilfe. Jetzt Tage habe ich ein Problem in spielen wieder. Ich habe einige Modell-Klassen, die mit eindeutigen id (nicht inkrementelle/Standard-id), damit ich erweitern GenericModel als Model in meinem Model-Klasse. Ich fühle mich verwirrt, wie man GenericMOdel's find() oder findById() Methoden für EmbeddedId Feld verwenden. Dies ist mein Schnipsel Codes:

Modelle Klasse 1:

@Entity
@Table(name="DATKAPJMLPST")
public class Datkapjmlpst extends GenericModel {
//private static final long serialVersionUID = 1L;

@EmbeddedId
public DatkapjmlpstPK id;

@Column(name="BIAYAKAP")
public BigDecimal biayakap;

@Column(name="BPJ")
public BigDecimal bpj;

@Temporal( TemporalType.DATE)
@Column(name="DtProses")
public Date dtProses;

public String flag;

@Column(name="JmlPstKom")
public BigDecimal jmlPstKom;

@Column(name="JmlPstSos")
public BigDecimal jmlPstSos;

@Column(name="JmlPstTotal")
public BigDecimal jmlPstTotal;

@Column(name="KdDati2")
public String kdDati2;

//@Column(name="KdKC")
@ManyToOne
@JoinColumn(name="KDKC")
public Refkc refKC;

@Column(name="NOREG")
public String noreg;

public Datkapjmlpst() {
}

}

Modellklasse 2:

@Embeddable
public class DatkapjmlpstPK extends GenericModel {

//default serial version id, required for serializable classes.
//private static final long serialVersionUID = 1L;

@Temporal(TemporalType.DATE)
@Column(name="Bln")
public Date bln;

//@Column(name="KdPPK")
@ManyToOne
@JoinColumn(name="KdPPK")
public Refppk refPPK;

@Column(name="KdBU")
public String kdBU;

public DatkapjmlpstPK() {
}

}

Die Methode des Controllers:

public static void show(Date bln, String kdppk, String kdbu) {
    JPAQuery datkapjmlpst = Datkapjmlpst.find("SELECT d FROM Datkapjmlpst d " +
            "WHERE d.id.bln=? AND d.id.refPPK.kdppk=? AND d.id.kdBU=?", bln,    kdppk, kdbu);

    render(datkapjmlpst, bln, kdppk, kdbu);
}   

Ansichten :

#{form @edit(datkapjmlpst.id.bln, datkapjmlpst.id.refPPK.kdppk, datkapjmlpst.id.kdBU)}
<p>
    <strong>Tanggal:</strong> ${datkapjmlpst.bln?.format('dd-MM-yyyy')}
</p>
<p>
    <strong>Kantor Cabang:</strong> ${datkapjmlpst.refKC.nmkc}
</p>
<p>
    <strong>BPJ:</strong> ${datkapjmlpst.bpj}
</p>
<p>
    <strong>Jml Peserta Sosial:</strong> ${datkapjmlpst.jmlPstSos}
</p>
<p>
    <strong>Status:</strong> ${datkapjmlpst.flag}
</p>

<p class="buttons">
    <input type="submit" value="Edit Kapitasi"> <a href="@{index()}">Back to search</a>      
</p>
#{/form}

Dieser Code hat eine Fehlerausgabe wie diese:

Internal Server Error (500) for request GET /kapitasi/show?     kdbu=00000000&kdppk=00080001&bln=2011-04-01

Template execution error (In /app/views/Kapitasi/show.html around line 5)

In der Vorlage /app/views/Kapitasi/show.html ist ein Ausführungsfehler aufgetreten. Die ausgelöste Ausnahme war MissingPropertyException: Keine solche Eigenschaft: id für Klasse: play.db.jpa.GenericModel$JPAQuery.

play.exceptions.TemplateExecutionException: No such property: id for class: play.db.jpa.GenericModel$JPAQuery
at play.templates.BaseTemplate.throwException(BaseTemplate.java:84)
at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:252)
at play.templates.Template.render(Template.java:26)
at play.templates.GroovyTemplate.render(GroovyTemplate.java:184)
at play.mvc.results.RenderTemplate.<init>(RenderTemplate.java:24)
at play.mvc.Controller.renderTemplate(Controller.java:659)
at play.mvc.Controller.renderTemplate(Controller.java:639)
at play.mvc.Controller.render(Controller.java:694)
at controllers.Kapitasi.show(Kapitasi.java:62)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:543)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:499)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:475)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:470)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:158)
at Invocation.HTTP Request(Play!)
Caused by: groovy.lang.MissingPropertyException: No such property: id for class:  play.db.jpa.GenericModel$JPAQuery
at /app/views/Kapitasi/show.html.(line:5)
at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:229)
... 13 more

0voto

lsiu Punkte 2137

Die Ausnahme ist die Beschwerde über Ihre DatkapjmlpstPK Klasse fehlt @Id. Ihr DatkapjmlpstPK Klasse ist eine EmbeddedId-Klasse, so dass sie nicht erweitert werden muss GenericModel

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X