Il n'y a que des réponses bêtes !
1/ Le code est instrumenté via le plugin ant dans maven. J'ai vérifié dans les traces, ça marche impecable. 2/ il y a bien no-proxy dans le mapping.
Pour les courageux, voici un extrait du code de test très simple qui comporte 2 entités: A et B. Le test crée un jeux de données et récupère le B référencé par A.
A+ Tibo
@Entity public class EntiteA {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) private long id;
private String string;
@OneToOne(fetch=FetchType.LAZY) @LazyToOne(LazyToOneOption.NO_PROXY) private EntiteB oneToOne;
@OneToMany(mappedBy="oneToManyRev") private List<EntiteB> oneToMany = new ArrayList<EntiteB>(); ... get/set
@Entity public class EntiteA {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) private long id;
private String string;
@OneToOne(fetch=FetchType.LAZY) @LazyToOne(LazyToOneOption.NO_PROXY) private EntiteB oneToOne;
@OneToMany(mappedBy="oneToManyRev") private List<EntiteB> oneToMany = new ArrayList<EntiteB>(); ... get/set
Jusque là, rien de bien sorcier.
Voila le code de test:
EntiteA a = creerDonneesDeTest(); EntiteB b;
session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction();
logger.info("session.get(EntiteA.class, a.getId())"); a = (EntiteA)session.get(EntiteA.class, a.getId()); if( a instanceof HibernateProxy ) logger.info("a est un proxy"); else logger.info("a est une entite");
logger.info("a.getOneToOne()"); b = a.getOneToOne();
if( b instanceof HibernateProxy ) logger.info("b est un proxy"); else logger.info("b est une entite");
logger.info("b.getString()"); b.getString();
logger.info("b.getOneToOneRev()"); a = b.getOneToOneRev();
if( a instanceof HibernateProxy ) logger.info("a est un proxy"); else logger.info("a est une entite"); session.getTransaction().commit(); Et voila les traces: 28 mai 2009 12:19:32 test.test_hibernate.AppTest test1 INFO: session.get(EntiteA.class, a.getId()) Hibernate: select entitea0_.id as id0_0_, entitea0_.oneToOne_id as oneToOne3_0_0_, entitea0_.string as string0_0_ from EntiteA entitea0_ where entitea0_.id=? Hibernate: select entiteb0_.id as id1_1_, entiteb0_.oneToManyRev_id as oneToMan3_1_1_, entiteb0_.oneToOneRev_id as oneToOne4_1_1_, entiteb0_.string as string1_1_, entitea1_.id as id0_0_, entitea1_.oneToOne_id as oneToOne3_0_0_, entitea1_.string as string0_0_ from EntiteB entiteb0_ left outer join EntiteA entitea1_ on entiteb0_.oneToManyRev_id=entitea1_.id where entiteb0_.id=? 28 mai 2009 12:19:32 test.test_hibernate.AppTest test1 INFO: a est une entite 28 mai 2009 12:19:32 test.test_hibernate.AppTest test1 INFO: a.getOneToOne() 28 mai 2009 12:19:32 test.test_hibernate.AppTest test1 INFO: b est un proxy 28 mai 2009 12:19:32 test.test_hibernate.AppTest test1 INFO: b.getString() 28 mai 2009 12:19:32 test.test_hibernate.AppTest test1 INFO: b.getOneToOneRev() 28 mai 2009 12:19:32 test.test_hibernate.AppTest test1 INFO: a est une entite 12:19:32,508 [main] INFO SessionFactoryImpl : closing 12:19:32,508 [main] INFO DriverManagerConnectionProvider : cleaning up connection pool: jdbc:mysql://localhost/test
On voit que b est un proxy alors que le code est instrumenté....
|