openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Milosz Tylenda (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OPENJPA-736) Combine insert and select SQL together for generated Id strategy=GenerationType.IDENTITY
Date Sun, 26 Apr 2009 08:26:30 GMT

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

Milosz Tylenda commented on OPENJPA-736:
----------------------------------------

Omitting an identity column is not the problem. The MySQL issue is that it does not allow
the retrieval of generated column by its actual name - coulmn name is always "GENERATED_KEY".
The PostgreSQL issue is that it requires exact case in column name passed to Connection.prepareStatement("insert
into IdentityGenerationType (someData) values('gktest')", new String[] {"orderid[case matters
here]"});

Looks like the solution is to pass identity column name thru DBDictionary case conversion
and to get generated column value by using column index. MySQL, PostgreSQL and DB2 accept
this. I will see what about MS SQL Server when I manage to install it. The MS JDBC 2.0 driver
suggests it behaves much like MySQL [1].

[1] http://msdn.microsoft.com/en-us/library/ms378445.aspx


> Combine insert and select SQL together for generated Id strategy=GenerationType.IDENTITY

> -----------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-736
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-736
>             Project: OpenJPA
>          Issue Type: Improvement
>    Affects Versions: 1.3.0
>            Reporter: Fay Wang
>            Assignee: Milosz Tylenda
>             Fix For: 1.3.0
>
>         Attachments: openjpa-736.patch
>
>
> Currently if the strategy of the generated id is GenerationType.IDENTITY,  when an entity
object is created, openjpa will generate two SQL statements. The following is an example running
on DB2:
> (1) INSERT INTO EntityA (col1, col2, col3, version) VALUES (?, ?, ?, ?) 
> [params=(int) 1, (int) 1, (int) 1, (int) 1]
> (2) SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
> A performance improvement is to take advantage of the "select from final table" feature
in DB2 to combine the insert and select statement into a single SQL statement as shown below:
> SELECT id FROM FINAL TABLE (INSERT INTO EntityA (col1, col2, col3, version) VALUES (?,
?, ?, ?) )

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message