import java.io.Serializable;
import lombok.Data; // auto-generates AllArgs contractor, getters/setters, equals, and hashcode
@Data
@Entity
@IdClass(MyEntity.class) // <--this is the extra annotation to add
@Table(name = "my_table")
public class MyEntity implements Serializable{ // <--this is the extra interface to add
@Id // annotate each column with @Id
private String column1;
@Id // annotate each column with @Id
private String column2;
}
上面的MyEntity以完整记录状态为键:
--所以,除了@EqualsAndHashcode之外,还要用Serializable接口标记类;
--用**@ID**注解每个字段
在〈T,ID〉存储库中,假设ID是完整的(实体)类:
interface MyEntityRepo extends CrudRepository<MyEntity, MyEntity> {
// ^^^the full record is the ID
3条答案
按热度按时间xfyts7mz1#
JPA要求每个实体都有一个ID,所以不允许没有ID的实体。
每个JPA实体都必须有一个主键。
从JPA spec开始
您可能希望从这里阅读更多关于当DB端没有id时JPA如何处理这种情况的内容(请参见“无主键”)。
vnzz0bqm2#
或者,您可以为所有POJO实体扩展
AbstractPersistable<Long>
。遵循示例:- https://github.com/spring-projects/spring-data-examples/blob/master/jpa/example/src/main/java/example/springdata/jpa/simple/User.java
iezvtpos3#
使用**@IdClass**(组合键)
是的,这是可能的。当您从DB视图读取时,可以使用此方法。以下示例演示了如何将所有 (在给定示例中为2) 列标记为复合ID:
另见: