[ 
https://issues.apache.org/jira/browse/OPENJPA-2651?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15416656#comment-15416656
 ] 

Francesco Chicchiriccò commented on OPENJPA-2651:
-------------------------------------------------

Thanks for this: it's always a good chance for me to get a bit more acquainted 
with the (huge) OpenJPA codebase ;-)

Anyway, the patch looks good, I've applied locally and been able to build 
OpenJPA 2.2.x with it.

Are you also going to provide patches for 2.3.x and trunk as well?

Finally, why is not the "affected versions" above set to 2.2.2, 2.3.0 and 
2.4.1? I would also set "fix for versions" to 2.2.3, 2.3.1 and 2.4.2.

Thanks again.


> IDs of entities are incorrectly assigned when @SqlResultSetMapping is used 
> with inheritance and a ManyToOne relationship.
> -------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2651
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2651
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: sql
>    Affects Versions: 2.2.3, 2.4.2
>            Reporter: Heath Thomann
>            Assignee: Heath Thomann
>            Priority: Critical
>         Attachments: OPENJPA-2651-2.2.x.patch, SqlResultSetMappingIssue.zip
>
>
> I have discovered an issue with using @SqlResultSetMapping when inheritance 
> and ManyToOne relationships are used.  To explain the issue, take this entity 
> and @SqlResultSetMapping:
> @Entity
> @SqlResultSetMapping(name = "MyResMap", entities = { 
> @EntityResult(entityClass = CrtRequisicaoChequePersEntity.class, fields = {
>     @FieldResult(name = "crtOperacaoByOperacaoRecepcaoServCent.id", column = 
> "opRecepcaoServCentraisId"),
>     @FieldResult(name = "crtOperacaoByOperacaoRecepcaoServCent.dataHora", 
> column = "opRecepcaoServCentraisDataHora") 
>     }) 
> })
> public class CrtRequisicaoChequePersEntity extends CrtRequisicaoEntity {
> .......
>     @ManyToOne
>     @javax.persistence.JoinColumn(name = "OPERACAO_RECEPCAO_SERV_CENT", 
> referencedColumnName = "ID")
>     private CrtOperacaoEntity crtOperacaoByOperacaoRecepcaoServCent;
> As you can see, this entity extends 'CrtRequisicaoEntity' and has a ManyToOne 
> relationship to 'CrtOperacaoEntity', with name 
> 'crtOperacaoByOperacaoRecepcaoServCent'.  As you can see, the @FieldResult in 
> the @SqlResultSetMapping references the fields in 'CrtOperacaoEntity'.   
> These two entities are defined as follows:
> @Entity
> @Inheritance(strategy = InheritanceType.JOINED)
> public class CrtRequisicaoEntity {
> .....
>     @Id
>     private long id;
> .....
> @Entity
> public class CrtOperacaoEntity implements Serializable {
> .....
>     @Id
>     private long id;
>     @Basic
>     private Timestamp dataHora;
> With these entities, take an SQL select which uses an AS (the entire SQL is 
> to long to add here, see provided recreate/test attached):
> String sqlCust = "SELECT t0.ID" +
> .........
> ",t2.DATA_HORA as opRecepcaoServCentraisDataHora" +
> ",t2.ID as opRecepcaoServCentraisId" +
> ....
> "FROM CrtRequisicaoChequePersEntity t0"
> ....                
> "INNER JOIN CrtOperacaoEntity t2"
> ....
> With this SQL, the two IDs will be populated with the ID from 
> CrtRequisicaoChequePersEntity, rather than the ID corresponding to each 
> entity.
> Thanks,
> Heath



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to