I have 3 entities described below (gettters and setters are cut for
readability):
---------------------------------------------------------------------------------------
@Entity
@Table(name="USER_SCHEMA")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType=DiscriminatorType.STRING,
name="DTYPE")

public abstract class UserSchema {

        @Id
        @Column(name="SCHEMA_ID",               columnDefinition="VARCHAR(100)",
nullable=false)
        private String schema = null;
        
        @Column(name="NAME",                    
columnDefinition="VARCHAR(100)", nullable=false)
        private String name = null;
...
---------------------------------------------------------------------------------------
@Entity
@DiscriminatorValue(value="COMPANY")
public class UserCompany extends UserSchema {

        @OneToMany(mappedBy="company", fetch=FetchType.EAGER)
        private List<UserStore> stores = new ArrayList<UserStore>();

...

@Entity
@DiscriminatorValue(value="STORE")
public class UserStore extends UserSchema {

        @ManyToOne
        private UserCompany company = null;

...
---------------------------------------------------------------------------------------
SQL Table generated properly by Mapped Tool and has expected structure :

CREATE TABLE USER_SCHEMA ( 
        SCHEMA_ID VARCHAR(100) NOT NULL , 
        NAME VARCHAR(100) NOT NULL , 
        DTYPE VARCHAR(31) DEFAULT NULL , 
        COMPANY_SCHEMA_ID  VARCHAR(100) DEFAULT NULL , 
        CONSTRAINT PRIMARY KEY( SCHEMA_ID ) ) ;
---------------------------------------------------------------------------------------
I inserted some data into tables. Company with id = AAZ01.0000 and Stores
with ids (AAZ01.0070, AAZ01.0135 etc. which belong to AAZ01.0000
(COMPANY_SCHEMA_ID = AAZ01.0000).
Now I'm reading data from database and when UserCompany reads it's
UserStores
I can see in SQL TRACE that OpenJPA creates one sql select request per each
store of the company like this :

3329  ssi.jpa  TRACE  [main] openjpa.jdbc.SQL - <t 10038190, conn 179514>
executing prepstmnt 30362156 SELECT t0.SCHEMA_ID, t0.DTYPE, t0.NAME FROM
USER_SCHEMA t0 WHERE t0.company_SCHEMA_ID = ? [params=(String) AAZ01.0000]
3585  ssi.jpa  TRACE  [main] openjpa.jdbc.SQL - <t 10038190, conn 179514>
[256 ms] spent
3838  ssi.jpa  TRACE  [main] openjpa.jdbc.SQL - <t 10038190, conn 179514>
executing prepstmnt 28171097 SELECT t1.SCHEMA_ID, t1.DTYPE, t1.NAME FROM
USER_SCHEMA t0 INNER JOIN USER_SCHEMA t1 ON t0.company_SCHEMA_ID =
t1.SCHEMA_ID WHERE t0.SCHEMA_ID = ? [params=(String) AAZ01.0070]
4088  ssi.jpa  TRACE  [main] openjpa.jdbc.SQL - <t 10038190, conn 179514>
[250 ms] spent
4566  ssi.jpa  TRACE  [main] openjpa.jdbc.SQL - <t 10038190, conn 179514>
executing prepstmnt 13359904 SELECT t1.SCHEMA_ID, t1.DTYPE, t1.NAME FROM
USER_SCHEMA t0 INNER JOIN USER_SCHEMA t1 ON t0.company_SCHEMA_ID =
t1.SCHEMA_ID WHERE t0.SCHEMA_ID = ? [params=(String) AAZ01.0135]
4823  ssi.jpa  TRACE  [main] openjpa.jdbc.SQL - <t 10038190, conn 179514>
[257 ms] spent
5328  ssi.jpa  TRACE  [main] openjpa.jdbc.SQL - <t 10038190, conn 179514>
executing prepstmnt 15177785 SELECT t1.SCHEMA_ID, t1.DTYPE, t1.NAME FROM
USER_SCHEMA t0 INNER JOIN USER_SCHEMA t1 ON t0.company_SCHEMA_ID =
t1.SCHEMA_ID WHERE t0.SCHEMA_ID = ? [params=(String) AAZ01.0140]


!!! FINALLY THE QUESTION :

Didn't we already selected all what we need with first select ????

SELECT t0.SCHEMA_ID, t0.DTYPE, t0.NAME FROM USER_SCHEMA t0 WHERE
t0.company_SCHEMA_ID = ? [params=(String) AAZ01.0000]

Why all the per store sql requests executed?


-- 
View this message in context: 
http://www.nabble.com/InheritanceType.SINGLE_TABLE-generated-sql-selects-tf4131850.html#a11750927
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Reply via email to