JPAVariablePersister will not work when @Id is declared on a superclass
-----------------------------------------------------------------------
Key: JBRULES-2522
URL:
https://jira.jboss.org/browse/JBRULES-2522
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Affects Versions: 5.1.0.M1
Reporter: Julien Serdaru
Assignee: Mark Proctor
Given A and B:
@MappedSuperclass
public class A {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id = null;
}
@Entity
public class B extends A {
// Some other fields
}
In JPAVariablePersister:getClassIdValue, a lookup is done on the entity fields to
autodetect the @Id annotation, which fails in this case since the method uses
getDeclaredFields() instead of getFields():
private Long getClassIdValue(Object o) throws NoSuchMethodException,
SecurityException, IllegalAccessException,
InvocationTargetException, IllegalArgumentException {
Field[] fields = o.getClass().getDeclaredFields(); <-- THIS ONLY RETURNS THE LOCAL
FIELDS, NOT THE SUPERCLASS.
...
return idValue;
}
Replacing getDeclaredFields() by getFields() should fix the problem.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira