【问题标题】:how to implements find() or findById() methods for embeddedId in Play framework如何在 Play 框架中为 embeddedId 实现 find() 或 findById() 方法
【发布时间】:2011-09-23 07:17:43
【问题描述】:

我最近一直在使用游戏框架来创建项目,非常感谢这个论坛中我的朋友的帮助。现在几天我又遇到了问题。我有一些具有唯一 ID(不是增量/默认 ID)的模型类,因此我在我的模型类中扩展了 GenericModel 而不是模型。我很困惑如何将 GenericMOdel 的 find() 或 findById() 方法用于 EmbeddedId 字段。 这是我的 sn-p 代码:

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

}

模型类 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}

这些代码有这样的错误输出:

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)

模板 /app/views/Kapitasi/show.html 中发生执行错误。引发的异常是 MissingPropertyException:没有这样的属性:类的 id: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

【问题讨论】:

  • 感谢您的修订乔纳斯..

标签: java jpa playframework


【解决方案1】:

例外是抱怨您的DatkapjmlpstPK 类缺少@Id。 你的DatkapjmlpstPK 类是一个 EmbeddedId 类,所以它不需要扩展GenericModel

【讨论】:

  • 谢谢Isiu。我尝试了你的建议,但仍然出错,然后我用实现 Serializable 替换 DatkapjmlpstPK 类中的 GenericModel,它仍然有相同的错误。引发的异常是 MissingPropertyException:没有这样的属性:类的 id:play.db.jpa.GenericModel$JPAQuery。
  • 作为附加信息,在我开始编写我的游戏框架之前,我的数据库已经建立。还有一些非规范化的表格设计。在这种情况下对我有什么建议..?谢谢之前
猜你喜欢
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 2015-06-30
  • 1970-01-01
  • 2013-12-04
  • 2016-09-16
相关资源
最近更新 更多