You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Francesco Chicchiriccò (JIRA)" <ji...@apache.org> on 2016/08/09 08:56:20 UTC
[jira] [Commented] (OPENJPA-2651) IDs of entities are incorrectly
assigned when @SqlResultSetMapping is used with inheritance and a ManyToOne
relationship.
[ https://issues.apache.org/jira/browse/OPENJPA-2651?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15413228#comment-15413228 ]
Francesco Chicchiriccò commented on OPENJPA-2651:
-------------------------------------------------
LGTM: are you keen to provide a test case too?
> 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)