Hello,

I am testing replication using JPA and mysql. It's really sweet how it automatically goes to the primary database for every write transaction.

The problem is when I try to persist an entity using a TableGenerator, it fails with this message:

     Cannot execute statement in a READ ONLY transaction.
{prepstmnt 1880527972 SELECT ID FROM insidetrack.id_generator WHERE TYPE0 = ? FOR UPDATE} [code=1792, state=25006]

Here's my connection information:

    openjpa.ConnectionDriverName=com.mysql.jdbc.ReplicationDriver
openjpa.ConnectionURL=jdbc:mysql:replication://192.168.1.35:3306,192.168.1.52:3306/insidetrack

And here is the code:

@Entity
@Table(name="rebate_agreement")
public class RebateAgreement implements NamedObject, DocumentOwner, SignedNotesHolder
{
    @TableGenerator(name="RebateGenerator",
            table="id_generator",
            pkColumnName="TYPE",
            pkColumnValue="REBATE",
            valueColumnName="ID",
            initialValue=10001,
            allocationSize=1)
@Id @GeneratedValue(strategy=GenerationType.TABLE, generator="RebateGenerator")
    private long id;

    @Version
    private int version;

    private String name;
    // etc.
}

The prepared statement from the error message indicates that when it tries to get an ID using the TableGenerator, the connection is read-only causing it to use the slave database.

Does anyone have any insights?

Thank you,

Rob


--
*Rob Scala*
Director of Information Technology
Buyers Edge, Inc
351 N. Frontage Road, Suite A210
New London, CT 06320
Phone - 860-701-0538x27
Fax - 860-701-0576

Reply via email to