0

Play2.0.2 で Ebeans を使用しています。次のような 2 つのモデルがあります。

@Entity
@Table(name="GRP_MST")
public class GroupMst extends Model {

@Id
@Constraints.Required
@Formats.NonEmpty
public String groupid;
......
@OneToMany(cascade = CascadeType.ALL)
public List<DtlMenuGrp> dtlMenuGrpList; // This one is giving problems 

}

そして私のDtlMenuGrpモデルは次のようになります:

@Entity
@Table(name="DTL_MENU_GRP")
public class DtlMenuGrp extends Model {

@Constraints.Required
@Formats.NonEmpty
public String groupid;
....
}

上記の2つのモデルに参加したいので、私のコントローラーで:

GroupMst groupMst = GroupMst.find.where().eq("groupid",data.get("grpid")).findUnique();
List<DtlMenuGrp> dtlMenuGrpList = groupMst.dtlMenuGrpList;

しかし、これにより以下の Excpetion of column not found が得られます。

Caused by: javax.persistence.PersistenceException: Query threw SQLException:Invalid column name 'group_mst_groupid'. 
Bind values:[1000] 
Query was:
select t0.groupid c0
        , t1.groupid c1, t1.rightid c2, t1.status c3, t1.createdby c4, t1.createdon c5 
from GRP_MST t0
left outer join DTL_MENU_GRP t1 on t1.group_mst_groupid = t0.groupid  
where t0.groupid = ?   
order by t0.groupid 

group_mst_groupid列が代わりにキャストされるのはなぜですかgroupid

4

1 に答える 1

1

gruopidあなたにもそのようなフィールドが含まれているので、キャストすることはできません(注釈DtlMenuGrpを忘れていませんか?)@id

Ebeanアソシエーションのフィールドキーを作成し、モデル名とそのフィールドgroup_mst_groupidの組み合わせとしてそれに適合するルールがいくつかあります。@Id指定したモデルの定義を使用して1.sqlを生成する方法をテストしたところ、次のように作成されました。

create table DTL_MENU_GRP (
group_mst_groupid         varchar(255) not null,
groupid                   varchar(255))
;

さらに、私はそれについて何のエラーもありません。

私のアドバイスは、モデル名に謎めいた略語を使用しないようにモデル名を変更し、常にsingleモデルとフィールドの可能な最短の単語を見つけるようにしてください。本当に必要になるまで、注釈でテーブル名をオーバーライドしないようにしてください。そうすれば、エラーをはるかに速く見つけることができ、必要に応じて手動で修正することができます...

すなわち。代わりにGroupMst(表)フィールドGRP_MSTを持つグループモデルを作成しますid

@Entity
public class Group extends Model {

  @Id
  public Long id; //why not a numeric id? for an example Long ?

  @OneToMany(cascade = CascadeType.ALL)
  public List<Menu> menus;
  // ...


}

推測するだけ...

@Entity
public class Menu extends Model {

  @Id
  public Long id;
  // ...

}

次に、Ebeanを使用してDDL全体を最初から生成すると、それがいかに単純で論理的であるかに驚かれることでしょう...

于 2012-08-08T15:30:55.543 に答える