[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-4112?page=c...
]
Maximiliano Carrizo commented on HHH-4112:
------------------------------------------
I agree with David. Imagine this scenario:
- You have an entity Person, which has several entities Addresses ( One to Many relation
), using cascade ALL.
- My Person entity has several Hibernate validations ( using annotations, of course ) and
my Address entity has several hibernate validation annotations too.
- When I validate Person entity I want Hibernate validates my Person entity AND my
Addresses entity TOO ! At the same time.
- I want to validate all these entiyies using ClassValidator.
What happens ? If my Addresses collection is a proxy collection, Hibernate ignores
Addresses validation ( because Address proxy doesn't have annotations ) and throws an
exception when I execute persist()
How can I make a workaround of this ?
I can manually iterate all relations and get class without proxy and validate them, but I
think this is not the idea.
HibernateProxy enhanced POJOs lose method annotations
-----------------------------------------------------
Key: HHH-4112
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-4112
Project: Hibernate Core
Issue Type: Bug
Components: core
Affects Versions: 3.2.0.ga
Reporter: David Green
Using FetchType.LAZY on an association can result in POJO entities being enhanced via
JavassistProxyFactory or CGLIBProxyFactory. The resulting class overrides all declared
accessors and mutators (get/set methods) in the original POJO. Those overridden methods
lose any annotations that were specified on the original POJO.
The result is that unsuspecting code looking for annotations on POJO accessors won't
find any annotations.
For example, if I have an @Entity POJO called Resident, the following JUnit test will
fail for both CGLIBProxyFactory and JavassistProxyFactory:
{code:Java}
public void testCGLibProxy() throws HibernateException, SecurityException,
NoSuchMethodException {
doTest(new CGLIBProxyFactory());
}
public void testJavassistProxy() throws HibernateException, SecurityException,
NoSuchMethodException {
doTest(new JavassistProxyFactory());
}
private void doTest(ProxyFactory proxyFactory) throws NoSuchMethodException {
HashSet proxyInterfaces = new HashSet();
proxyInterfaces.add( HibernateProxy.class );
proxyFactory.postInstantiate("Resident", Resident.class, proxyInterfaces,
Resident.class.getDeclaredMethod("getId"),
Resident.class.getDeclaredMethod("setId",Long.class), null);
HibernateProxy hibernateProxy = proxyFactory.getProxy(resident.getId(), session);
assertTrue(hibernateProxy instanceof Resident);
System.out.println("Hibernate proxy name:
"+hibernateProxy.getClass().getName());
assertNotNull(Resident.class.getDeclaredMethod("getMaritalStatus").getAnnotation(Required.class));
assertNotNull(hibernateProxy.getClass().getDeclaredMethod("getMaritalStatus").getAnnotation(Required.class));
}
{code}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira