2012-08-08 51 views
0

正在使用Ebeans與Play2.0.2 我有兩個模型是這樣的:例外與Ebean一對多

@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; 
.... 
} 

我想加入上述兩個我的控制器中的型號如下:

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

但是這給了我下面的Ex列cpetion未發現:

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

+0

你是如何創建1.sql進化的?你是自己寫的,還是用Ebean自動創建的? – biesior 2012-08-08 15:01:13

回答

1

它不能被鑄造爲gruopid爲您DtlMenuGrp也包含這樣的字段(NOTA好處沒有忘記@id註釋?)

Ebean爲關聯創建字段關鍵字有一些規則,並且group_mst_groupid適合它,因爲它是模型名稱和其@Id字段的組合。我只是測試它如何生成模型的定義,你給了1.SQL及其創建的完全一樣:

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

更重要的是我還沒有對任何錯誤。

我的建議是,儘量更改型號名稱以避免在其名稱中使用神祕的縮寫,但總是試圖找到可能的最短的single單詞用於型號和字段。儘量避免使用註釋覆蓋表名,直到真正需要爲止。那麼你將能夠更快地找到錯誤,並且如果需要手動修復它們...

ie。相反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,你會驚訝它是多麼簡單和合乎邏輯......

+0

+ 1 ..感謝您對ebean和ORM的新解釋..我不知道'1.sql' evolution..have是否爲我現有的數據庫結構手動創建了模型.. – 2012-08-08 18:40:54

+0

我想建議熟悉自動創建的1.sql文件,即使是完全獨立的項目。實際上 - 嘗試簡化模型和字段名稱,您將在未來看到爲什麼這是個好主意,特別是當您禁用自動DDL並從頭開始寫入時。 – biesior 2012-08-08 19:12:01

+0

問題是我正在工作的目前的項目已經存在數據庫,所以我已禁用自動DDL ..任何這種情況的建議? – 2012-08-09 05:54:23