title: Cannot use delete() on CrudRepository
body: <p>I'm using the latest spring (4.0.4) and Hibernate (4.3.5) and spring-data-jpa (1.6.0) for the first time and am having trouble getting the repository to work on a MySQL table to write or delete data. It's reading data fine, but when I try to delete, nothing happens. Things work fine if I use an H2 database, but when I switch my data source to be a MySQL server, delete() stops working. </p>
  
  <p><strong>Question 1: Why isn't the CrudRepository sub-class able to delete rows from my table entity when I use a MySQL data source, but it works with the same code if I use an H2 data source?</strong></p>
  
  <p>I can delete data if I create functions like this in my sub-class of CrudRepository:</p>
  
  <pre><code>public interface MyEntityRepository extends CrudRepository&lt;MyEntity, Long&gt; {
      @Modifying
      @Query("delete from MyEntity where entity_id = ?1")
      void delete(Long entityId);
  
      @Modifying
      @Query("delete from StageTeacher")
      void deleteAll();
  }
  </code></pre>
  
  <p>I am hoping I'm missing something simple. But in my unit test class, I've got this autowired repository reference:</p>
  
  <pre><code>@Autowired
  MyEntityRepository myEntityRepository;
  </code></pre>
  
  <p>When I'm using the MySQL data source these commands do nothing (they don't even case a run-time error):</p>
  
  <pre><code>myEntityRepository.deleteAll();
  myEntityRepository.delete(myEntity.getId());
  </code></pre>
  
  <p>Here's the 2 data sources (H2 is commented out) and the entity manager factory I create using this code:</p>
  
  <pre><code>@Bean
  public EntityManagerFactory entityManagerFactory() throws SQLException {
      DriverManagerDataSource dataSource = new DriverManagerDataSource();
      dataSource.setDriverClassName("com.mysql.jdbc.Driver");
      dataSource.setUrl("jdbc:mysql://&lt;host name&gt;:3306/&lt;schema name&gt;");
      dataSource.setUsername("&lt;username&gt;");
      dataSource.setPassword("&lt;password&gt;");
  
      /*
      EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
      DriverManagerDataSource dataSource = builder.setType(EmbeddedDatabaseType.H2).build();
      */
  
      HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
      // used when I have H2 enabled
      //vendorAdapter.setGenerateDdl(true);
  
      LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
      factory.setJpaVendorAdapter(vendorAdapter);
  
      Properties properties = new Properties();
      properties.setProperty("hibernate.show_sql", "true");
      properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLMyISAMDialect");
      factory.setJpaProperties(properties);
  
      factory.setPackagesToScan("&lt;package with table entity classes&gt;");
      factory.setDataSource(dataSource);
      factory.afterPropertiesSet();
  
      return factory.getObject();
  }
  </code></pre>
  
  <p><strong>EDIT:</strong> I've added the following to my log4j.xml:</p>
  
  <pre><code>&lt;logger name="org.hibernate"&gt;
      &lt;level value="DEBUG"/&gt;
  &lt;/logger&gt;
  &lt;logger name="org.springframework.data"&gt;
      &lt;level value="DEBUG"/&gt;
  &lt;/logger&gt;
  </code></pre>
  
  <p>I get this in the console when I have my methods un-commented in the Repository sub-class:</p>
  
  <pre><code>DEBUG [main] IntegrationTests.delete(54) | &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; delete all??
  DEBUG [main] AbstractTransactionImpl.begin(160) | begin
  DEBUG [main] LogicalConnectionImpl.obtainConnection(226) | Obtaining JDBC connection
  DEBUG [main] LogicalConnectionImpl.obtainConnection(232) | Obtained JDBC connection
  DEBUG [main] JdbcTransaction.doBegin(69) | initial autocommit status: true
  DEBUG [main] JdbcTransaction.doBegin(71) | disabling autocommit
  Hibernate: delete from stage_teacher
  DEBUG [main] AbstractTransactionImpl.commit(175) | committing
  DEBUG [main] JdbcTransaction.doCommit(113) | committed JDBC Connection
  DEBUG [main] JdbcTransaction.releaseManagedConnection(126) | re-enabling autocommit
  DEBUG [main] LogicalConnectionImpl.releaseConnection(246) | Releasing JDBC connection
  DEBUG [main] LogicalConnectionImpl.releaseConnection(264) | Released JDBC connection
  </code></pre>
  
  <p>and the delete succeeds!</p>
  
  <p>However, if I comment the repository sub-class methods out, I'll get this in the console:</p>
  
  <pre><code>DEBUG [main] IntegrationTests.delete(54) | &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; delete??
  DEBUG [main] AbstractTransactionImpl.begin(160) | begin
  DEBUG [main] LogicalConnectionImpl.obtainConnection(226) | Obtaining JDBC connection
  DEBUG [main] LogicalConnectionImpl.obtainConnection(232) | Obtained JDBC connection
  DEBUG [main] JdbcTransaction.doBegin(69) | initial autocommit status: true
  DEBUG [main] JdbcTransaction.doBegin(71) | disabling autocommit
  Hibernate: select stageteach0_.entity_id as entity_i1_0_0_, stageteach0_.active as active2_0_0_, stageteach0_.alias as alias3_0_0_, stageteach0_.allow_marketing_emails as allow_ma4_0_0_, stageteach0_.allow_password_resets as allow_pa5_0_0_, stageteach0_.console_setting_id as console_6_0_0_, stageteach0_.date_created as date_cre7_0_0_, stageteach0_.date_deactivated as date_dea8_0_0_, stageteach0_.date_modified as date_mod9_0_0_, stageteach0_.default_role_id as default10_0_0_, stageteach0_.district_teacher_id as distric11_0_0_, stageteach0_.email_address as email_a12_0_0_, stageteach0_.first_name as first_n13_0_0_, stageteach0_.first_name_localized as first_n14_0_0_, stageteach0_.iid as iid15_0_0_, stageteach0_.last_name as last_na16_0_0_, stageteach0_.last_name_localized as last_na17_0_0_, stageteach0_.main_teacher_id as main_te18_0_0_, stageteach0_.password as passwor19_0_0_, stageteach0_.pref_language_id as pref_la20_0_0_, stageteach0_.rest_id as rest_id21_0_0_, stageteach0_.salutation_id as salutat22_0_0_, stageteach0_.school_teacher_id as school_23_0_0_, stageteach0_.status_id as status_24_0_0_, stageteach0_.tcd as tcd25_0_0_, stageteach0_.teacher_type_id as teacher26_0_0_, stageteach0_.username as usernam27_0_0_ from stage_teacher stageteach0_ where stageteach0_.entity_id=?
  DEBUG [main] ResultSetProcessorImpl.extractResults(127) | Starting ResultSet row #0
  DEBUG [main] EntityReferenceInitializerImpl.resolveEntityKey(142) | On call to EntityIdentifierReaderImpl#resolve, EntityKey was already known; should only happen on root returns with an optional identifier specified
  DEBUG [main] TwoPhaseLoad.doInitializeEntity(160) | Resolving associations for [org.mind.gen40.domain.gen40.StageTeacher#10956]
  DEBUG [main] TwoPhaseLoad.doInitializeEntity(286) | Done materializing entity [org.mind.gen40.domain.gen40.StageTeacher#10956]
  DEBUG [main] AbstractLoadPlanBasedEntityLoader.load(208) | Done entity load : org.mind.gen40.domain.gen40.StageTeacher#10956
  DEBUG [main] AbstractTransactionImpl.commit(175) | committing
  DEBUG [main] JdbcTransaction.doCommit(113) | committed JDBC Connection
  DEBUG [main] JdbcTransaction.releaseManagedConnection(126) | re-enabling autocommit
  DEBUG [main] LogicalConnectionImpl.releaseConnection(246) | Releasing JDBC connection
  DEBUG [main] LogicalConnectionImpl.releaseConnection(264) | Released JDBC connection
  </code></pre>
  
  <p>Does the failure to delete have something to do with this message? </p>
  
  <pre><code>On call to EntityIdentifierReaderImpl#resolve, EntityKey was already known; should only happen on root returns with an optional identifier specified
  </code></pre>
  
  <p>I'm not sure what that means...</p>
  
  <p><strong>Question 2: Do I have to sub-class CrudRepository for each table that I need basic CRUD operations on, or can I use a reference to the table entity class to create a CrudRepository at run-time for a given table?</strong></p>
  
  <p><strong>Question 3: If I need to manually create my delete and insert methods on a large number of CrudRepository sub-classes, are there any suggestions on generating table entities and DAO or repository classes given tables in MySQL?</strong> </p>