5

ここに私のモデルドキュメントがあります:

@Entity
@Table(name = "documents")
public class Document extends Model {
    @Id
    public Long id;

    @Constraints.Required
    @Formats.NonEmpty
    @Column(nullable=false)
    public String document;
    
    public static Model.Finder<Long,Document> find = new Model.Finder(Long.class, Document.class);
    
    // Will return an absolute URL to this document
    public String getUrl() {
        return controllers.routes.Documents.display(document.toLowerCase()).absoluteURL(Http.Context.current().request());
    }
}

問題は、コンパイル時に VerifyError 例外がスローされることです。それを回避するために私が見つけた唯一のことは、行にコメントを付けて に置き換えることですがreturn null、これはあまり効果的ではありません。

その例外のスタック トレースは次のとおりです。

Caused by: java.lang.VerifyError: Bad type on operand stack in method models.Document.getUrl()Ljava/lang/String; at offset 13
    at java.lang.Class.forName0(Native Method) ~[na:1.7.0_05]
    at java.lang.Class.forName(Class.java:264) ~[na:1.7.0_05]
    at play.db.ebean.EbeanPlugin.onStart(EbeanPlugin.java:69) ~[play_2.9.1.jar:2.0.2]

このエラーは何ですか? getUrl メソッドを失わずに回避するにはどうすればよいですか?

4

3 に答える 3

4

Ebean はここで魔法をかけようとしていると思います。

静的関数を使用することをお勧めします。

public static String buildUrl(String document) {
    return controllers.routes.Documents.display(document.toLowerCase()).absoluteURL(Http.Context.current().request());
}
于 2012-08-11T12:14:17.673 に答える
3

あなたはただ追加することができます

@Transient

メソッドへの注釈とそれは動作します!

于 2014-06-23T15:39:48.927 に答える
1

今日も同じ問題がありました。上記で提案したのと同じロジックを適用しようとしましたが (問題のメソッドに静的関数を使用)、役に立ちませんでした。プレイを再開し、クリーンアップし、再コンパイルすると、問題はなくなりました。

これが私が使用した再生コマンドです。

exit
play
clean
run
于 2014-01-16T17:53:38.143 に答える