Хранилище save () не фиксирует и не сохраняет данные в таблице, а возвращает объект с первичным ключом, который уже находится в таблице. - PullRequest
0 голосов
/ 13 февраля 2019

Я пишу реализацию JPA, чтобы заменить реализацию JDBC запросом.Я использовал имя объекта последовательности базы данных Oracle в @SequenceGenerator, как показано в коде.В результате save () возвращает уже существующие данные в таблице, а не генерирует новый первичный ключ и вставляет в таблицу.Я думаю, что последовательность генерирует существующий первичный ключ вместо генерации нового.

 @Entity
 @Table(name = "table")
     public class TableDetail implements java.io.Serializable{
        @Id
        @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "table_seq")
        @SequenceGenerator(sequenceName = "SEQ_TABLE", allocationSize = 1, name = "table_seq")
        private Long AUDT_ID;
        ....
 }


 @Repository
 public interface TableDetailDAO extends CrudRepository<TableDetail, Long> {
       TableDetail save(TableDetail tableDetail);
 }


@Service
@Transactional
public class TableDetailServiceImpl implements TableDetailService {
    public void createAuditEvent(TableDetail tableDetail) {

       @Autowired
       TableDetailDAO tableDetailDAO;

       TableDetail tableDetail = 
   tableDetailDAO.save(tableDetail);
    }

}

1 Ответ

0 голосов
/ 15 февраля 2019

Итак, я понял, что это из-за моего конфигурационного файла JDBC Database, где я определил этот TransactionManager, как показано на рисунке.Мне пришлось удалить это или определить JpaTransactionManager в этом методе.Прямо сейчас это определение не позволяло JPA обрабатывать коммит, из-за которого данные не сохранялись в базе данных.Это определение присутствовало, потому что раньше оно было реализацией JDBC.

Кроме того, мне пришлось использовать GenerationType.AUTO, потому что, насколько я понимаю, GenerationType.SEQUENCE используется только тогда, когда в Sequence не определен объект Sequence.База данных.

 /**
  * Creates a handle to the TransactionManager.
   *
   * @return PlatformTransactionManager
   */
  @Bean(name = "transactionManager")
    public PlatformTransactionManager txManager() {
    return new DataSourceTransactionManager(initializeDataSource());
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...