java 如何使用没有@Id的spring仓库?

iaqfqrcu  于 2022-12-17  发布在  Java
关注(0)|答案(3)|浏览(114)

我在整个应用程序中使用spring CrudRepository,现在我还想为一个没有@Id@Entity创建一个spring,这可能吗?

//probably ID is always required?
public interface Repository<T, ID extends Serializable>
xfyts7mz

xfyts7mz1#

JPA要求每个实体都有一个ID,所以不允许没有ID的实体。
每个JPA实体都必须有一个主键。
JPA spec开始
您可能希望从这里阅读更多关于当DB端没有id时JPA如何处理这种情况的内容(请参见“无主键”)。

iezvtpos

iezvtpos3#

使用**@IdClass**(组合键)

是的,这是可能的。当您从DB视图读取时,可以使用此方法。以下示例演示了如何将所有 (在给定示例中为2) 列标记为复合ID:

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

另见:

  1. docs.oracle.com-示例7.4-7.5:非嵌入复合主键
  2. baeldung.com/jpa-composite-primary-keys,用于更细粒度的自定义IdClass,ID中的列数(少于全部)。

相关问题