我有一个使用
的实体@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
我有这个实体的JPA存储库。现在我想删除其中一个,但标准方法是delete(int i)
,这是行不通的,因为我的ID不是整数,而是Longs。除了使用int
作为我的ID之外,该怎么做?我可以指定使用long的自定义删除方法,就像它与findbyXX(XX)
一起使用吗?
编辑: 首先:是的我正在使用Data JPA!
我想这样做:
jparepository.delete(id);
如果id是整数:
org.hibernate.TypeMismatchException: Provided id of the wrong type for class com.Entity. Expected: class java.lang.Long, got class java.lang.Integer
如果id为long:
no method found for delete(long)
所以我可以将我的ID更改为int,这是我不想做的,或者找到一种让Repository长时间工作的方法。问题是如何
答案 0 :(得分:13)
好的结果证明这只是一个愚蠢的错误。所以我的JPARepository看起来像这样:
public interface EntityRepository extends JpaRepository<Entity, Integer> {
但Integer
代表实体ID字段的类型,在我的情况下为Long
。
所以我需要改为.. JpaRepository<Entity, Long>
答案 1 :(得分:2)
如果您使用的是Spring Data JPA,则默认的删除方法为:
void delete(T entity);
看这里: Spring Data JPA Docs
另外,使用Long比使用long更好,因为在验证时可以使用更多方法:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
答案 2 :(得分:1)
假设您正在讨论spring数据JPA,是的,如果您想要通过用户定义的内容进行删除,则可以指定自定义方法,但这对于按ID删除不是必需的。请参阅spring docs:
您可以按照与实体ID类型相对应的通用ID类型进行删除(在您的情况下为Long
)。这应该有用。