我将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);
}
}
如果您有任何问题,我会很感激您的帮助。
2条答案
按热度按时间sauutmhj1#
我觉得你的专栏有问题
product_id
它实际上定义为表中的主键。您可以指定
productId
您自己或分配一个id生成策略主键id生成策略类型。如果您决定自己分配productid,那么它必须是唯一的(不存在于该表(product)的该列中)。
如果你仔细观察你的异常,你会发现这一点
Duplicate entry for key 'PRIMARY'
,这意味着尝试在表(product)的主键列(product\ id)中插入重复值。或者您可以用这个替换上面的主键列代码
谢谢:)
pkbketx92#
请使用
@GeneratedValue(strategy = GenerationType.AUTO)
在productId
.