Ich habe eine Anwendung, die auf zwei Servern ausgeführt wird und beide diese Server über Hibernate auf dieselbe Datenbank zugreifen. Das Problem hier ist, wenn diese beiden Anwendungen große Datenmengen verarbeiten und versuchen, in die gleiche Tabelle einzufügen. Es kommt zu einer primären Schlüsselverletzung. Und von den Dingen, die ich bemerkt habe, scheint Hibernate eine Anzahl von Primärschlüssel-IDs zu puffern. z.B. Wenn Server A Daten in die ID 100 einfügt und gleichzeitig Server B in die ID 200 einfügt. Ich denke, dieses Problem hängt mit dem oben genannten Szenario zusammen. Es folgt meine Hibernate EigenschaftenHibernate-Primärschlüsselverletzung auf zwei Serverinstanzen
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/dbtest?autoReconnect=true</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<!-- <property name="hibernate.show_sql">true</property>-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--
<property name="hibernate.hbm2ddl.auto">update</property>
-->
<property name="hibernate.use_sql_comments">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.connection.zeroDateTimeBehavior">convertToNull</property>
<property name="hibernate.connection.isolation">2</property>
<property name="hibernate.default_schema">dbtest</property>
<property name="hibernate.jdbc.batch_size">50</property>
<!--c3po connection pooling -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
Dies ist die Einheit, die
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Sep 3, 2014 4:38:39 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.test.dto.AdditionalContacts" table="additional_contacts"
entity-name="additionalcontacts">
<id name="contactId" type="java.lang.Integer" column="contactId">
<generator class="increment" />
</id>
<property name="contactGuid" type="java.lang.String">
<column name="contactGuid" />
</property>
<property name="contactName" type="java.lang.String">
<column name="contactName" />
</property>
<property name="salutation" type="java.lang.String">
<column name="salutation" />
</property>
<property name="EmailAddress" type="java.lang.String">
<column name="email" />
</property>
<property name="includeInEmails" type="java.lang.Boolean">
<column name="includeInEmails" />
</property>
<property name="Website" type="java.lang.String">
<column name="website" />
</property>
<property name="city" type="java.lang.String">
<column name="city" />
</property>
<property name="state" type="java.lang.String">
<column name="state" />
</property>
<property name="postCode" type="java.lang.String">
<column name="postCode" />
</property>
<property name="country" type="java.lang.String">
<column name="country" />
</property>
<property name="street" type="java.lang.String">
<column name="street" />
</property>
<property name="streetLine1" type="java.lang.String">
<column name="streetLine1" />
</property>
<property name="streetLine2" type="java.lang.String">
<column name="streetLine2" />
</property>
<property name="streetLine3" type="java.lang.String">
<column name="streetLine3" />
</property>
<property name="streetLine4" type="java.lang.String">
<column name="streetLine4" />
</property>
<property name="phone1" type="java.lang.String">
<column name="phone1" />
</property>
<property name="phone2" type="java.lang.String">
<column name="phone2" />
</property>
<property name="phone3" type="java.lang.String">
<column name="phone3" />
</property>
<property name="fax" type="java.lang.String">
<column name="fax" />
</property>
<property name="location" type="java.lang.String">
<column name="location" />
</property>
<property access="field" column="createDate" insert="true"
name="createDate" update="false" />
<property access="field" column="modifyDate" insert="true"
name="modifyDate" update="true" />
</class>
</hibernate-mapping>
Und nach ist das Unternehmen versagt, die über Unternehmen verwendet
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Sep 3, 2014 4:38:39 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.test.dto.Contacts" table="contact"
entity-name="contact">
<id name="cGuid" type="java.lang.String">
<column name="contactGuid" />
</id>
<property name="org" type="java.lang.Integer">
<column name="org" />
</property>
<property name="Name" type="java.lang.String">
<column name="name" />
</property>
<property name="FirstName" type="java.lang.String">
<column name="firstName" />
</property>
<property name="LastName" type="java.lang.String">
<column name="lastName" />
</property>
<property name="abn" type="java.lang.String">
<column name="abn" />
</property>
<property name="active" type="java.lang.Boolean">
<column name="active" />
</property>
<property access="field" column="createDate" insert="true"
name="createDate" update="false" />
<property access="field" column="modifyDate" insert="true"
name="modifyDate" update="true" />
<bag name="additionalContactList" table="additional_contact" lazy="false" inverse="true"
cascade="all">
<key>
<column name="contactGuid" not-null="true" />
</key>
<one-to-many entity-name="additionalcontacts"
class="com.test.dto.AdditionalContact" />
</bag>
</class>
</hibernate-mapping>
Dieses auf
versagtcascade = "alle"
Fügen Sie die Hibernate-Zuordnung für das Objekt hinzu, das Sie einfügen möchten – Adam
Welche Art von ID wird eingefügt? – Adam
Was ist Ihre ID-Generierungsstrategie? – diufanman