JPA / Spring-boot Дублирующая запись для ключа 'PRIMARY' - PullRequest
0 голосов
/ 31 октября 2018

Я использую JPA для операций mysql, но несколько раз я получаю сообщение об ошибке при выполнении операций сохранения mysql через JPA. Ошибка при выполнении операции сохранения =>

Не удалось открыть JPA EntityManager для транзакции; Дубликат записи для ключа «ПЕРВИЧНЫЙ»

Класс модели стола:

@Entity
@Table(name="table_x")
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
@TypeDefs({
        @TypeDef(name = "json", typeClass = JsonStringType.class),
        @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class),
})
public class tableX implements Serializable {

    @Id
    @Column(name="product_id")
    private Long productId;

    @Column(name="parent_id")
    private Long parentId;

    // other fields
}

Mysql Схема:

 CREATE TABLE `table_x` (
  `product_id` int(12) unsigned NOT NULL,
  `parent_id` int(12) unsigned DEFAULT NULL,
  // other fields
  PRIMARY KEY (`product_id`)
)

Класс репозитория:

@Repository
public interface TableXRepository extends CrudRepository<tableX,Long> {
}

Mysql Операционный класс:

@Component
@Transactional
public class tableXoperationImpl implements ItableXoperation {

    @Autowired
    private TableXRepository tableXRepository;

    public void save(tableX data) {
        tableXRepository.save(data);
    }
}

что-нибудь, я здесь скучаю, любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Пожалуйста, используйте @GeneratedValue (стратегии = GenerationType.AUTO) на идентификатор продукта.

0 голосов
/ 31 октября 2018

Я думаю, что проблема с вашим столбцом product_id, который фактически определен как первичный ключ в таблице.

@Id  //this annotation make column as primary key.
@Column(name="product_id")
private Long productId;

Вы можете назначить productId либо самостоятельно, либо назначить Стратегию генерации идентификатора Тип стратегии генерации идентификатора первичного ключа .

если вы решите назначить productId самостоятельно, он должен быть уникальным (не существует в этом столбце в этой таблице (product)).

Если вы внимательно посмотрите на свое исключение, вы обнаружите это Duplicate entry for key 'PRIMARY', что означает попытку вставить дублирующее значение в столбец первичного ключа (product_id) таблицы (Product).

или вы можете заменить вышеуказанный код столбца первичного ключа на этот

@GeneratedValue(strategy=GenerationType.AUTO) // automatically generated primary key.
@Id  // Primary key.
@Column(name="product_id")
private Long productId;

Спасибо:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...