QA@IT

Child.java 40行目でコンパイルエラーが出る。シンボルを見つけられません。

3767 PV

@ITの記事「Play frameworkのDB操作を楽にするEBeanの基礎知識 (2/3)」についての質問です。


Compilation error
エラー: シンボルを見つけられません
In C:\play-2.2.3\firstProject\app\models\Child.java at line 40.
37                + name + ", createDate=" + createDate + ", updateDate="
38                + updateDate + "]";
39    }
40  Parent parent1 = query.findUnique();

41}


[info] Loading project definition from C:\play-2.2.3\firstProject\project
[info] Set current project to firstProject (in build file:/C:/play-2.2.3/firstProject/)

--- (Running the application from SBT, auto-reloading is enabled) ---

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Ctrl+D to stop and go back to the console...)

[info] Compiling 1 Java source to C:\play-2.2.3\firstProject\target\scala-2.10\classes...
[error] C:\play-2.2.3\firstProject\app\models\Child.java:40: エラー: シンボルを見つけられません
[error]     Parent parent1 = query.findUnique();
[error]                      ^
[error]   シンボル:   変数 query
[error]   場所: クラス Child
[error] エラー1個
[error] Picked up _JAVA_OPTIONS: "-Dfile.encoding=SJIS"
[error] (compile:compile) javac returned nonzero exit code
[error] application - 

! @6jn0inon7 - Internal server error, for (GET) [/] ->

play.PlayExceptions$CompilationException: Compilation error[エラー: シンボルを見つけられません]
    at play.PlayReloader$$anon$1$$anonfun$reload$2$$anonfun$apply$14$$anonfun$apply$16.apply(PlayReloader.scala:304) ~[na:na]
    at play.PlayReloader$$anon$1$$anonfun$reload$2$$anonfun$apply$14$$anonfun$apply$16.apply(PlayReloader.scala:304) ~[na:na]
    at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
    at play.PlayReloader$$anon$1$$anonfun$reload$2$$anonfun$apply$14.apply(PlayReloader.scala:304) ~[na:na]
    at play.PlayReloader$$anon$1$$anonfun$reload$2$$anonfun$apply$14.apply(PlayReloader.scala:298) ~[na:na]
    at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
[warn] play - No application found at invoker init


package models;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Version;
import javax.validation.constraints.NotNull;

import javax.persistence.*;
import java.util.*;

import play.db.ebean.Model;

import com.avaje.ebean.annotation.CreatedTimestamp;

@Entity
public class Parent extends Model {

    @Id
    public Long id;

    @NotNull
    public String name;

    @CreatedTimestamp
    public Date createDate;

    @Version
    public Date updateDate;

    public String toString() {
        return "Parent [id=" + id + ", name=" + name + ", createDate="
                + createDate + ", updateDate=" + updateDate + "]";
    }

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "parent") 
    public List<Child> children = new ArrayList<Child>();
}


package models;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Version;

import play.db.ebean.Model;

import com.avaje.ebean.annotation.CreatedTimestamp;
//import com.avaje.ebean.validation.NotNull;

@Entity
public class Child extends Model {

    @Id
    public Long id;

    @ManyToOne
    @JoinColumn(name = "parent_id")
    public Parent parent;

//  @NotNull
    public String name;

    @CreatedTimestamp
    public Date createDate;

    @Version
    public Date updateDate;

    public String toString() {
        return "Child [id=" + id + ", parent.id=" + parent.id + ", name="
                + name + ", createDate=" + createDate + ", updateDate="
                + updateDate + "]";
    }
//削除しました    Parent parent1 = query.findUnique();
}

Execution exception
[PersistenceException: Unique expecting 0 or 1 rows but got [2]]
In C:\play-2.2.3\firstProject\app\controllers\Application.java at line 22.
19
20      // parent1 の取得(条件を指定した検索)
21        Query<Parent> query = finder.where("name='新宿太郎'");
22        Parent parent1 =query.findUnique();
23 
24        // parent2 の取得(Idからの検索。Idは保存したときに振られたId)
25        Parent parent2 =finder.byId(new Long(2));
26      
27      // 1番目の名前を更新します

DATABASEの中身の表示は、
新宿太郎
新宿太郎
代々木太郎
となっているので、22行目で、ユニークでは無く、同じ物なのでエラーなのかもしれませんね。
それが、解ってもどうすれば良いか解りません。

回答

Child.javaには、queryという変数が出てこないので、このようなエラーになります。

元のサイトには、その40行目のコードは書いていないと思いますので、40行目を削除すれば、コンパイルは通るはずです。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。