实体是Tile,在地图上用它的坐标唯一标识:
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=new Tile(x,y);
答案 0 :(得分:5)
这取决于您的属性具有哪种ID。
首先,您需要在@Transient
方法上添加注释isNew()
。
如果您的ID是Long
(或任何其他对象),您可以查看是否id == null
。如果您的ID是long
(或任何其他原语),则需要检查id == 0
。
在您发布的实体中有一个嵌入式ID,并且不要只执行if embedded == null,因为JPA将检查属性。
答案 1 :(得分:3)
我认为没有一种首选方式。
我想您可以,例如,实现版本列并使用1进行初始化,isNew()
可以return version == 1;
我确定还有其他方法可以做到。