2016-08-05 4 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

Не могли бы вы также добавить [configuration to log sql] (https://www.playframework.com/documentation/2.5.x/JavaDatabase#How-to-configure-SQL-log-statement) и опубликовать то, что выполняется? – marcospereira

ответ

1

Спасибо за предложение @marcospereira. Мне не хватает поля id в теге. После включения отладки и регистрации sql я заметил предупреждение в журналах. Правильный способ создать класс Tag:

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

, но это странно, почему Ebean делает это.

Надеюсь, что это поможет кому-то в будущем.

+2

Ebean позволяет сущностям не иметь свойства @Id ... С этими объектами, полезными для целей отчетности. –

+0

Примечание: для лучшей поддержки кросс-DB рекомендуется не указывать стратегию генерации идентификаторов, а вместо этого Ebean выбирает подходящую стратегию, основанную на платформе БД. –

+0

@RobBygrave Спасибо, что указали это, отредактировал ответ. – kamalkishor1991