我有一个用例,其中我的大多数模型类都将id和name作为字段以及特定于实体的字段作为字段。
要达到相同的目的,我有一个超级类:
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class BasicEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
public BasicEntity() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
派生类:
@Entity
public class DerivedEntity extends BasicEntity {
}
然后我尝试使用CrudRepository通过名称获取实体:
@Repository
public interface GenericRepository<T extends BasicEntity> extends CrudRepository<T, Integer> {
//T findByName(String name);
}
此代码给出了错误
“不是实体:BasicEntity类”。
我在这里理解错误,这是错误的,因为类BasicEntity不是单独的实体,我想知道是否可以通过某种方式为crudRepository指定泛型,例如T扩展了BaseEntity而未包括BasicEntity。
我也知道我可以通过使用具体映射来映射BasicEntity类@entity和@Inheritance来使用继承,但我不希望那样。
还有其他解决方法吗?
答案 0 :(得分:0)
您可以这样写
id_watch ==_id
现在创建一个基本存储库
@Entity
@Inheritance
public abstract class BasicEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
}
现在另一个存储库扩展了基本存储库。
@NoRepositoryBean
public interface BaseRepository<T extends BasicEntity>
extends CrudRepository<T, Long> {
public T findByName(String name);
}
用于自定义查询 您可以像这样在Base Repository自定义查询中引用正确的实体
public interface DevivedRepository extends BaseRepository<User> { /* ... */ }
entityName的值是T类型的jpa的rplacae
这将起作用