jpa - 在Spring Data中为具有预定义ID的实体实现Persistable.isNew的首选方法

标签 jpa spring-data spring-data-jpa

实体是 Tile,在 map 上用它的坐标唯一标识:

import org.springframework.data.domain.Persistable;

@Entity
class Tile implements Persistable<Tile.Coordinates> {
   @Embeddable
   public static class Coordinates implements Serializable {
       long x;
       long y;
       public Coordinates(x,y){this.x=x; this.y=y;}
   }

   @EmbeddedId Coordinates coordinates;

   private Tile(){}
   public Tile(long x,long y) {this.coordinates=new Coordinates(x,y);}

   @Override
   public boolean isNew(){
      // what is preferred implementation? 
   }
   // other code
}

Tile 坐标是预定义的,因为没有坐标的 Tile 毫无意义。
Tile tile=new Tile(x,y);

最佳答案

这取决于您的属性具有哪种 ID。

首先,您需要将注释 @Transient 放在 isNew() 方法上。

如果您的 id 是 Long (或任何其他对象),您可以检查是否 id == null 。如果您的 id 是 long (或任何其他原语),您将需要检查 id == 0

在您发布的实体中,有一个嵌入的ID,并且不要仅执行if Embedded == null的操作,因为JPA会检查属性。

关于jpa - 在Spring Data中为具有预定义ID的实体实现Persistable.isNew的首选方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26313044/

相关文章:

java - JPA 多对多自引用关系与附加列

java - Spring Data 规范 - 带 join 的 RSQL

java - Spring Boot中如何使用ORDER BY?

java - 如何在 spring jpa 中检查日期不为空

java - 如何使用谓词通过 JpaRepository.findAll 获取不同的对象列表?

eclipse - JPA : No connection specified for the project

java - Embeddable 中枚举的 @ElementCollection

spring-boot - 在 spring boot/spring data elasticsearch 中禁用自动索引创建

java - 包含枚举列表的 Jpa 存储库

java - JPA 实体管理器未正确注入(inject) - Weblogic