2011-09-23 104 views
2

最近我與play framework合作創建了項目,非常感謝您在本論壇的朋友爲您提供的幫助。現在,我再次遇到問題。我有一些模型類具有唯一的ID(不是增量/默認ID),因此我擴展GenericModel比我的模型類中的模型。我感到困惑的是如何爲EmbeddedId字段使用GenericMOdel的find()或findById()方法。 這是我的代碼段的代碼:如何在Play框架中爲embeddedId實現find()或findById()方法

模型類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() { 
} 

}

Model類別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() { 
} 

}

控制器的方法,包括:

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

查看:

#{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} 

這些碼具有這樣的錯誤輸出:在模板/app/views/Kapitasi/show.html發生

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) 

執行錯誤。引發的異常是MissingPropertyException:沒有這樣的屬性:id爲class: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 
+0

感謝您的修改喬納斯.. – Sapardi

回答

0

唯一的例外是抱怨你DatkapjmlpstPK類失蹤@Id。 你DatkapjmlpstPK類是EmbeddedId類,所以它並不需要擴展GenericModel

+0

謝謝Isiu。我嘗試了你的建議,但仍然錯誤,然後我使用實現Serializable替換DatkapjmlpstPK類中的GenericModel,它仍然具有相同的錯誤。引發的異常是MissingPropertyException:沒有此類屬性:id爲類:play.db.jpa.GenericModel $ JPAQuery。 – Sapardi

+0

作爲附加信息,在開始編寫我的播放框架之前,我的數據庫已經編譯完成。還有一些非標準化的桌子設計。對我這種情況的任何建議..?以前感謝 – Sapardi

相關問題