I have a quite simple JAP-Entity without any links to other classes:
@Entity
@IdClass(TimestampNameAndGroupIdentity.class)
public class TechFitMainClassHistory extends JPABase {
    @Id
    @Basic
    protected Date timestamp;
    @Id
    @Basic
    protected String type_name;
    @Id
    @Basic
    protected String group_name;
    @Basic
    protected int count;
    ...
with IdClass:
public class TimestampNameAndGroupIdentity implements Serializable {
    private static final long serialVersionUID = 1L;
    public Date timestamp;
    public String type_name;
    public String group_name;
    ...
When in a test I try to merge it twice:
        em.merge(new TechFitMainClassHistory(date, "com.test.Main", "java", 2));
        em.merge(new TechFitMainClassHistory(date, "com.test.Main", "java", 2));
I get the following error
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Violation of PRIMARY KEY constraint 'PK__TechFitM__D91CE761E4A3725C'. Cannot insert duplicate key in object 'dbo.TechFitMainClassHistory'. The duplicate key value is (PROCESS_TYPE_MAIN, 2015-09-03 00:00:00.0000000, com.ruxit.Main). {prepstmnt 261650860 INSERT INTO TechFitMainClassHistory (group_name, timestamp, type_name, count) VALUES (?, ?, ?, ?)} [code=2627, state=23000]
    at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:219)
    at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:207)
    at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$1200(LoggingConnectionDecorator.java:59)
    at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeBatch(LoggingConnectionDecorator.java:1215)
    at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeBatch(DelegatingPreparedStatement.java:250)
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeBatch(JDBCStoreManager.java:1810)
    at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.executeBatch(BatchingPreparedStatementManagerImpl.java:364)
    at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushBatch(BatchingPreparedStatementManagerImpl.java:189)
    ... 39 more
There are two cases where the error does not appear: * If I commit between the calls * If the object already exists before the calls
This is just the reduced test-case, the actual application does similar things and I would expect things to work based on the description of the merge() method.
So why do I get this error? I would expect merge to work multiple times or this is a bug/limitation in OpenJPA?
 
    