2016-04-13 15 views
1

Firtstのための重複エントリ「5」、私は手動で私のデータベースに10件のレコードを追加しました。それから、私はプロジェクトを実行しましたが、これは次のように間違っていました:キー 'PRIMARY'に重複するエントリ '1'。そして、私はこのページを9回リフレッシュしました。「重複エントリー '2' 'キー' PRIMARY '」から「重複エントリー' 10 'キー' PRIMARY」。最後に、プロジェクトは正常になりました。つまり、11レコードからデータベースにアイテムを挿入できます。どうしましたか?com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:すべての主要な「PRIMARY」

私は5.10最終verisonで休止状態を使用します。そして、私は次のように私のコードブロックが表示されます:

私の混乱は、プロジェクトによって作成されたテーブルがauto_increatementのために設定されていなかったということです。 pictures this is a picture

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 

     <property name="dataSource" ref="dataSource"/> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> 
     </property> 

     <property name="packagesToScan" value="com"/> 

     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.implicit_naming_strategy">legacy-jpa</prop> 

       <prop key="hibernate.format_sql">true</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> 

       <prop key="hibernate.cache.use_query_cache">true</prop> 
       <prop key="hibernate.cache.use_second_level_cache">true</prop> 
       <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop> 
      </props> 
     </property> 

     <property name="sharedCacheMode" value="ENABLE_SELECTIVE"/> 
    </bean> 
import org.hibernate.annotations.GenericGenerator; 
import org.springframework.format.annotation.DateTimeFormat; 

import javax.persistence.*; 
import java.util.Date; 


@Table(name = "sssp_empoyee") 
@Entity 
public class Employee { 

    private Integer id; 
    private String lastName; 
    private String email; 

    @DateTimeFormat(pattern = "yyyy-MM-dd") 
    private Date birth; 
    private Date crateTime; 
    private Department department; 

    @GeneratedValue(generator = "system-uuid") 
    @GenericGenerator(name = "system-uuid", strategy = "increment") 
    @Id 
    public Integer getId() { 

     return id; 
    } 


@Transactional 
public void saveEmployee(Employee employee) { 

    employee.setCrateTime(new Date()); 

    respository.saveAndFlush(employee); 
} 

エラー情報:次のよう

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException : Duplicate entry '5' for key 'PRIMARY' 
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
sun.reflect.DelegatingConstructorAccessorImpl.__newInstance(DelegatingConstructorAccessorImpl.java:45) 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java) 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java) 
java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 
com.mysql.jdbc.Util.getInstance(Util.java:381) 
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015) 
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515) 
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447) 
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951) 
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101) 
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554) 
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761) 
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2046) 
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1964) 
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1949) 
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:147) 
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204) 
org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45) 
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2921) 
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3421) 
org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:89) 
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:560) 
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:434) 
org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:337) 
org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39) 
org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1295) 
org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1300) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
sun.reflect.DelegatingMethodAccessorImpl.__invoke(DelegatingMethodAccessorImpl.java:43) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java) 
java.lang.reflect.Method.invoke(Method.java:498) 
org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:344) 
com.sun.proxy.$Proxy35.flush(Unknown Source) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
sun.reflect.DelegatingMethodAccessorImpl.__invoke(DelegatingMethodAccessorImpl.java:43) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java) 
java.lang.reflect.Method.invoke(Method.java:498) 
+0

私はときに自分のIDジェネレータは常に再び0から始まる数えますあなたはプロジェクトを再開することができますか? –

+0

私はデータベースに追加し、元の件のデータを手動で1から始めていることは、プロジェクトが、独自のIDを持っているようですが、データベースのIDに応じていません。私はIDの自動治療を設定しました。私はこの問題を解決する方法を知らない。 – JSO

答えて

0
@GeneratedValue(strategy=GenerationType.AUTO) 

を私はあなたがAUTO

Check this SO answer

として戦略を使用する必要があると思います
+0

ありがとうございます!はい、私は非常にfisrtこのメソッドを使用し、それは間違っていたので、私はそれを変更しました。最後に、プロジェクトによって作成されたテーブルがAUTO_Increatementを設定していないことがわかりました。そのチェックボックスはfalseです。 – JSO

-1

MySQLは、このように設定する上で動作:

@GeneratedValue(strategy = GenerationType.IDENTITY) 

それはAUTO_INCREMENTの機能を持つテーブルを作成します。しかし、デフォルト設定の@GeneratedValueでは、テーブルの増分は設定されません。それは鍵ではありません。私は、データベースに新しいエントリを挿入する際

は今どんなに多くのオリジナルの私のデータベースのレコードは、「....重複エントリー」のエラー情報と間違って行くことはありません。

0

使用@GeneratedValue(strategy = GenerationType.IDENTITY)

0

、あなたのテーブル構造を変更し、テーブル内の列のIDにauto_incrementを追加し、以下のクエリを使用して:

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment 
関連する問題