JPA / Spring / Delete Entity,输入Mismatch(int / long for id)

时间:2016-01-08 01:41:57

标签: java spring hibernate jpa

我有一个使用

的实体
@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长时间工作的方法。问题是如何

3 个答案:

答案 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:

http://docs.spring.io/spring-data/data-commons/docs/current/api/org/springframework/data/repository/CrudRepository.html#delete-ID-

您可以按照与实体ID类型相对应的通用ID类型进行删除(在您的情况下为Long)。这应该有用。