4 回答
TA贡献1816条经验 获得超6个赞
您必须更改存储库中 ID 类型参数的类型,以匹配实体上的 id 属性类型。
来自 Spring 文档:
Interface Repository<T,ID>
Type Parameters:
T - the domain type the repository manages
ID - the type of the id of the entity the repository manages
基于
@Entity // This tells Hibernate to make a table out of this class
@Table(name = "users")
public class XmppUser {
@Id
private java.lang.String username;
//...
}
它应该是
public interface UserRepository extends CrudRepository<XmppUser, String> {
//..
}
TA贡献1909条经验 获得超7个赞
我认为有一种方法可以解决这个问题。
比方说,Site 是我们的@Entity。
@Id private String id; getters setters
然后你可以调用 findById 如下
Optional<Site> site = getSite(id);
注意:这对我有用,我希望它能帮助别人。
TA贡献1784条经验 获得超2个赞
你可以尝试这样的事情:
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "PR_KEY")
private String prKey;
TA贡献1820条经验 获得超9个赞
JpaRepository 是 CrudRepository 的特例。JpaRepository 和 CrudRepository 都声明了两个类型参数,T 和 ID。您将需要提供这两种类类型。例如,
public interface UserRepository extends CrudRepository<XmppUser, java.lang.String> {
//..
}
或者
public interface UserRepository extends JpaRepository<XmppUser, java.lang.String> {
//..
}
请注意,第二种类型java.lang.String必须与主键属性的类型相匹配。在这种情况下,您不能将其指定为Stringor Integer,而是指定为java.lang.String。
尽量不要将自定义类命名为String. 使用与 JDK 中已经存在的类名相同的类名是一种不好的做法。
添加回答
举报