jpa/spring引导键“primary”的重复条目

j2cgzkjk  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(417)

我将jpa用于mysql操作,但是有几次我在通过jpa执行mysql保存操作时出错。执行保存操作时出错=>
无法为事务打开jpa entitymanager;键“primary”的条目重复
表模型类:

@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);
    }
}

如果您有任何问题,我会很感激您的帮助。

sauutmhj

sauutmhj1#

我觉得你的专栏有问题 product_id 它实际上定义为表中的主键。

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

您可以指定 productId 您自己或分配一个id生成策略主键id生成策略类型。
如果您决定自己分配productid,那么它必须是唯一的(不存在于该表(product)的该列中)。
如果你仔细观察你的异常,你会发现这一点 Duplicate entry for key 'PRIMARY' ,这意味着尝试在表(product)的主键列(product\ id)中插入重复值。
或者您可以用这个替换上面的主键列代码

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

谢谢:)

pkbketx9

pkbketx92#

请使用 @GeneratedValue(strategy = GenerationType.AUTO)productId .

相关问题