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.