[ 
https://issues.apache.org/jira/browse/OPENJPA-2651?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Work on OPENJPA-2651 started by Heath Thomann.
----------------------------------------------
> 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
>
> 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