2016-08-05 38 views
1

以下是我的模型。Ebean不會與Play-2.5(OneToMany)級聯持久性

用戶:

標籤
@Entity 
@Table(name="users") 
public class User extends Model { 
    String username; 
    @Id 
    String id; 
    @OneToMany(cascade = CascadeType.ALL) 
    List<Tag> tags; 
} 

@Entity 
@Table(name="tags") 
public class Tag extends Model { 

    @Constraints.Required 
    public String tag; 
} 

持久性代碼(已刪除不必要的代碼):

User user = new User(); 
user.id = UUID.randomUUID().toString(); 
user.username = username; // String 
user.tags = tags; // list of tags; 
Ebean.save(user); 

我打電話Ebean.save(用戶)之後加入標籤到用戶對象。 在用戶上添加的標籤不會持久保存到數據庫。我也沒有看到任何異常,其他領域的用戶得到堅持,但沒有標籤。 我錯過了什麼嗎?

注意:我正在使用postgres。

+0

你可以發佈代碼片段,你堅持的信息? –

+0

您還可以添加[配置到日誌sql](https://www.playframework.com/documentation/2.5.x/JavaDatabase#How-to-configure-SQL-log-statement)併發布正在執行的內容嗎? – marcospereira

回答

1

感謝您的建議@marcospereira。 我在標記模型中缺少id字段。啓用調試和SQL日誌記錄後,我注意到日誌中的警告。 正確的方法來創建標籤類:

@Entity 
@Table(name="tags") 
public class Tag { 
    @Id 
    @GeneratedValue 
    public String id; 
    public String tag; 
} 

但爲什麼Ebean就是幹這個很是怪異。

希望這可以幫助未來的人。

+2

Ebean允許實體不具有@Id屬性......這些實體對報告目的有用。 –

+0

有關最佳交叉DB支持的注意事項,建議不要指定ID生成策略,而是讓Ebean根據數據庫平臺選擇適當的策略。 –

+0

@RobBygrave謝謝你指出,編輯答案。 – kamalkishor1991