J'ai des problèmes de mappage d'une collection de chaînes et d'énumérations dans mes entités. J'ai suivi différents conseils, mais rien ne semble fonctionner. J'utilise PlayFramework 2.0 et le Ebean fourni comme ORM.Mappage de collection de chaînes et d'enum avec Ebean (Lecture 2.0)
Voici une classe d'illustration:
package models;
import java.util.*;
import javax.persistence.*;
import play.db.ebean.Model;
@Entity
@Table(name = "foo")
public class Foo extends Model {
private static final long serialVersionUID = 1L;
private enum FooBar {
FOO, BAR;
}
@Id
public Long id;
@ElementCollection
@Enumerated(EnumType.STRING)
@CollectionTable(name = "bar_foobar",
joinColumns = @JoinColumn(name = "bar_id",
referencedColumnName = "id"))
@Column(name = "foobar")
public List<FooBar> fooBars;
@ElementCollection(targetClass = String.class)
@CollectionTable(name = "bar_strings",
joinColumns = @JoinColumn(name = "bar_id"))
@Column(name = "string", nullable = false)
public List<String> listOfStrings;
@Basic
public List<String> listOfStrings2;
// Attempt to circumvent the issue, but this gives a strange error
//public String[] arrayOfString;
}
Le DDL généré lorsque l'application est lancée ressemble à ceci:
create table foo (
id bigint not null,
constraint pk_foo primary key (id))
;
je me attends de voir les deux tables bar_foobar
et bar_strings
créés, si les annotations étaient correctes.
Si vous utilisez la variable arrayOfString
, je reçois un message weired erreur lors du lancement de l'application (qui se rapporte à une entité au hasard, pas nécessairement Foo.class
PersistenceException: Erreur avec [models.user.User] Il n'a pas été amélioré mais c'est superClass [classe play.db.ebean.Model] est? (Vous n'êtes pas autorisé à mélanger amélioration dans une hiérarchie d'héritage unique) marqueur [play.db.ebean.Model] className [modèles .user.User]
Je sais que je pourrais envelopper mes cordes et enums dans des entités, et utiliser une relation @ManyToMany, mais la pensée de cela me fait frissonner. Y a-t-il un bug ici dans Play 2.0 ou Ebean (en utilisant la version 2.7.3)? Y a-t-il d'autres façons de résoudre mon problème?
Merci pour la réponse. C'est en ce qui concerne la PersistenceException, non? J'ai effectivement essayé de passer à la version 2.0.1, et j'ai obtenu la même exception après cela. Mais peut-être que j'ai besoin de construire le projet à partir de zéro avec 2.0.1 afin d'avoir cette solution? Ma question principale était sur le mappage String/Enum, désolé d'ajouter une deuxième question dans le message. – kvitso