2016-08-05 28 views
1

Hier sind meine Modelle.Ebean ist keine Kaskadierung Persistenz mit Play-2.5 (OneToMany)

Benutzer:

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

Tag:

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

    @Constraints.Required 
    public String tag; 
} 

Persistenz-Code (Entfernt unnötige Code):

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

Ich rufe Ebean.save (Benutzer) nach dem Hinzufügen Tags zum Benutzerobjekt. Beim Benutzer hinzugefügte Tags werden nicht in der Datenbank beibehalten. Ich sehe auch keine Ausnahme, andere Felder des Benutzers bleiben erhalten, aber nicht Tags. Fehle ich etwas?

Hinweis: Ich benutze Postgres.

+0

können Sie den Code-Ausschnitt veröffentlichen, in dem Sie die Informationen beibehalten? –

+0

Könnten Sie auch [Konfiguration zu log sql] (https://www.playframework.com/documentation/2.5.x/JavaDatabase#How-to-configure-SQL-log-statement) hinzufügen und posten, was ausgeführt wird? – marcospereira

Antwort

1

Danke für den Vorschlag @marcospereira. Ich fehlte ID-Feld im Tag-Modell. Nach dem Aktivieren des Debuggens und der SQL-Protokollierung bemerkte ich eine Warnung in den Protokollen. Die richtige Art und Weise Tag-Klasse zu erstellen:

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

aber es ist seltsam, warum Ebean das tut.

Hoffe, dass dies in Zukunft jemand hilft.

+2

Ebean erlaubt Entitäten, keine @Id-Eigenschaft zu haben ... Diese Entitäten sind für die Berichterstellung nützlich. –

+0

Hinweis für die beste Cross-DB-Unterstützung wird empfohlen, keine ID-Generierungsstrategie anzugeben und stattdessen Ebane eine geeignete Strategie basierend auf der DB-Plattform auswählen zu lassen. –

+0

@RobBygrave Danke, dass Sie darauf hingewiesen haben und die Antwort bearbeitet haben. – kamalkishor1991