Les listes dans mon model

81 views
Skip to first unread message

grimmpat

unread,
Jun 14, 2012, 4:10:49 AM6/14/12
to play-framework
Bonjour,

J'essaye de creer une liste (jusque là, pas de problème) de modle dans
un model.
Je m'explique :

@Entity
public class UF extends Model{

@Required
@Unique
public String codeUF;


Et ici :

@Entity
public class Service extends Model{

@Required
public String nomService;

@OrderBy("codeUF")
@OneToMany(cascade=CascadeType.ALL)
@Required
public List<UF> ufs = new ArrayList<UF>();

Lorsque je veux ajouter un UF, pas de problème, mais pour ajouter un
service, j'obtient ce message :

***********************************************
10:04:34,128 WARN ~ SQL Error: 90021, SQLState: 90021
10:04:34,128 ERROR ~ Data conversion error converting
"'nomDuService1' (ID BIGINT DEFAULT (NEXT VALUE FOR
PUBLIC.SYSTEM_SEQUENCE_41339D74_D54B_45DF_826E_B11EE8A6148E) NOT NULL
NULL_TO_DEFAULT SEQUENCE
PUBLIC.SYSTEM_SEQUENCE_41339D74_D54B_45DF_826E_B11EE8A6148E)"; SQL
statement:
insert into Service (id, nomService) values (null, ?) [90021-149]
javax.persistence.PersistenceException:
org.hibernate.exception.GenericJDBCException: could not insert:
[models.Service]
at
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:
1214)
at
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:
1147)
at
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:
1153)
at
org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:
678)
at play.db.jpa.JPABase._save(JPABase.java:25)
at controllers.Services.addService(Services.java:120)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:
548)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:
478)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:
473)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:
257)
at play.Invoker$Invocation.run(Invoker.java:278)
at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:235)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown
Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor
$ScheduledFutureTask.access$201(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor
$ScheduledFutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.exception.GenericJDBCException: could not
insert: [models.Service]
at
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:
140)
at
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:
128)
at
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:
66)
at
org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:
64)
at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:
2345)
at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:
2852)
at
org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:
71)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
at
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:
320)
at
org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:
203)
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:
129)
at
org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:
69)
at
org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:
179)
at
org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:
135)
at
org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:
61)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786)
at
org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:
672)
... 22 more
Caused by: org.h2.jdbc.JdbcSQLException: Data conversion error
converting "'geriatrie' (ID BIGINT DEFAULT (NEXT VALUE FOR
PUBLIC.SYSTEM_SEQUENCE_41339D74_D54B_45DF_826E_B11EE8A6148E) NOT NULL
NULL_TO_DEFAULT SEQUENCE
PUBLIC.SYSTEM_SEQUENCE_41339D74_D54B_45DF_826E_B11EE8A6148E)"; SQL
statement:
insert into Service (id, nomService) values (null, ?) [90021-149]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:
327)
at org.h2.message.DbException.get(DbException.java:167)
at org.h2.message.DbException.get(DbException.java:144)
at org.h2.table.Column.convert(Column.java:149)
at
org.h2.constraint.ConstraintReferential.checkRowOwnTable(ConstraintReferential.java:
326)
at
org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:
271)
at org.h2.table.Table.fireConstraints(Table.java:812)
at org.h2.table.Table.fireAfterRow(Table.java:829)
at org.h2.command.dml.Insert.insertRows(Insert.java:128)
at org.h2.command.dml.Insert.update(Insert.java:86)
at org.h2.command.CommandContainer.update(CommandContainer.java:69)
at org.h2.command.Command.executeUpdate(Command.java:209)
at
org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:
143)
at
org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:
129)
at
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:
105)
at org.hibernate.id.IdentityGenerator
$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
at
org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:
57)
... 37 more

grimmpat

unread,
Jun 14, 2012, 4:15:26 AM6/14/12
to play-framework
Avec tout ça, je ne vois ai même pas remercié ..
Peut-être arriverai vous a me trouver une solution.
Merci

Mathias Clerc

unread,
Jun 14, 2012, 4:15:24 AM6/14/12
to play-fr...@googlegroups.com
Je crois qu'il faille que tu utilises:
@OneToMany(mappedBy = "service", cascade= CascadeType.ALL)

Et dans ta classe UF ajouter un champ:
@ManyToOne
@JoinColumn(name = "service_fk")
public Service service;


2012/6/14 grimmpat <tom.mass...@gmail.com>:
> --
> You received this message because you are subscribed to the Google Groups "play-framework" group.
> To post to this group, send email to play-fr...@googlegroups.com.
> To unsubscribe from this group, send email to play-framewor...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/play-framework?hl=en.
>

grimmpat

unread,
Jun 14, 2012, 4:26:29 AM6/14/12
to play-framework
Quel est l'interet de rajouter dans mon model UF un champs
correspondant au model Service ?
Puisque du fait, si je suis ton raisonnement, lorsque je créer mon UF,
je dois aussi renseigné un Service mais il est créer seulement après
puisque j'ai besoin d'une UF pour le créer qui lui a besoin d'un
service, ... je crois que sa tourne en boucle non ?
Mais comme gères tu la création dans le controler de l'UF et du
Service ?
Jusqu'a présent, je faisais :
*** Pour l'UF :
public static void addUF(String codeUF) {
UF uf = new UF();
uf.codeUF = codeUF;
uf._save();
*** Pour le Service :
public static void addService(String nomService, Long
uf) {
UF u = UF.findById(uf);
List<Service> xx = Service.find("nomService
= ?",nomService).fetch();
/**
* Si le service existe deja, on ajoute l'uf a sa liste d'UFs
*/
if (xx.size() != 0) {
for (Service s : xx) {
if (s.nomService.equalsIgnoreCase(nomService)) {

s.ufs.add(u);
s.save();
showAll();
}
}
}
/**
* Si le service n'existe pas, on le créer et on ajoute l'uf a sa
liste
*/
Service serv = new Service();
serv.nomService = nomService;
List<UF> listUF = new ArrayList<UF>();
listUF.add(u);
serv.ufs = listUF;
serv._save();

Je ne m'y connais pas trop sur play! je développe depuis 2 mois
seulement.
En tout cas, merci pour votre réponse rapide !

On 14 juin, 10:15, Mathias Clerc <tlarhi...@gmail.com> wrote:
> Je crois qu'il faille que tu utilises:
> @OneToMany(mappedBy = "service", cascade= CascadeType.ALL)
>
> Et dans ta classe UF ajouter un champ:
> @ManyToOne
> @JoinColumn(name = "service_fk")
> public Service service;
>
> 2012/6/14 grimmpat <tom.massol.59...@gmail.com>:
> > org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerIm­pl.java:
> > 1214)
> >        at
> > org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerIm­pl.java:
> > 1147)
> >        at
> > org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerIm­pl.java:
> > 1153)
> >        at
> > org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerIm­pl.java:
> > org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLSt­ateConverter.java:
> > 140)
> >        at
> > org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:
> > 128)
> >        at
> > org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.jav­a:
> > 66)
> >        at
> > org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractRet­urningDelegate.java:
> > 64)
> >        at
> > org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntit­yPersister.java:
> > 2345)
> >        at
> > org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntit­yPersister.java:
> > 2852)
> >        at
> > org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInser­tAction.java:
> > 71)
> >        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
> >        at
> > org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(Ab­stractSaveEventListener.java:
> > 320)
> >        at
> > org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveE­ventListener.java:
> > 203)
> >        at
> > org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(Abstr­actSaveEventListener.java:
> > 129)
> >        at
> > org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3Pe­rsistEventListener.java:
> > 69)
> >        at
> > org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(Defau­ltPersistEventListener.java:
> > 179)
> >        at
> > org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersis­tEventListener.java:
> > 135)
> >        at
> > org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersis­tEventListener.java:
> > 61)
> >        at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808)
> >        at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782)
> >        at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786)
> >        at
> > org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerIm­pl.java:
> > 672)
> >        ... 22 more
> > Caused by: org.h2.jdbc.JdbcSQLException: Data conversion error
> > converting "'geriatrie' (ID BIGINT DEFAULT (NEXT VALUE FOR
> > PUBLIC.SYSTEM_SEQUENCE_41339D74_D54B_45DF_826E_B11EE8A6148E) NOT NULL
> > NULL_TO_DEFAULT SEQUENCE
> > PUBLIC.SYSTEM_SEQUENCE_41339D74_D54B_45DF_826E_B11EE8A6148E)"; SQL
> > statement:
> > insert into Service (id, nomService) values (null, ?) [90021-149]
> >        at org.h2.message.DbException.getJdbcSQLException(DbException.java:
> > 327)
> >        at org.h2.message.DbException.get(DbException.java:167)
> >        at org.h2.message.DbException.get(DbException.java:144)
> >        at org.h2.table.Column.convert(Column.java:149)
> >        at
> > org.h2.constraint.ConstraintReferential.checkRowOwnTable(ConstraintReferent­ial.java:
> > 326)
> >        at
> > org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java­:
> > 271)
> >        at org.h2.table.Table.fireConstraints(Table.java:812)
> >        at org.h2.table.Table.fireAfterRow(Table.java:829)
> >        at org.h2.command.dml.Insert.insertRows(Insert.java:128)
> >        at org.h2.command.dml.Insert.update(Insert.java:86)
> >        at org.h2.command.CommandContainer.update(CommandContainer.java:69)
> >        at org.h2.command.Command.executeUpdate(Command.java:209)
> >        at
> > org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStateme­nt.java:
> > 143)
> >        at
> > org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:
> > 129)
> >        at
> > com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPr­eparedStatement.java:
> > 105)
> >        at org.hibernate.id.IdentityGenerator
> > $GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
> >        at
> > org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractRet­urningDelegate.java:
> > 57)
> >        ... 37 more
>
> > --
> > You received this message because you are subscribed to the Google Groups "play-framework" group.
> > To post to this group, send email to play-fr...@googlegroups.com.
> > To unsubscribe from this group, send email to play-framewor...@googlegroups.com.
> > For more options, visit this group athttp://groups.google.com/group/play-framework?hl=en.- Masquer le texte des messages précédents -
>
> - Afficher le texte des messages précédents -

Mathias Clerc

unread,
Jun 14, 2012, 4:56:37 AM6/14/12
to play-fr...@googlegroups.com
Hibernate a besoin d'un endroit pour enregistrer l'information qu'un
UF appartient a un service (pour construire la list cote service).
Le moyen de le faire c'est de creer un champ dans UF qui pointe vers
le service et apres hibernate retrouve ses petits.

Tu peux toujours creer un UF sans le parenter a un service, a ce
moment la la valeur service sera null.

Si tu ne veux pas ajouter un champ a UF, alors tu peux toujours creer
une table de jointure. Je ne me rappel plus de la syntaxe JPA pour ca
mais dans mes souvenirs, il vaut mieux ajouter un champ qui retourne
null de temps en temps et qui peut etre utile.

2012/6/14 grimmpat <tom.mass...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages