直到今天我还没有使用EclipseLink工作,我似乎无法找到@NaturalId
。那么EclipseLink中的Hibernate' s @NaturalId
等同于什么?
import javax.persistence.CascadeType;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import org.hibernate.annotations.NaturalId;
import lombok.Data;
@Entity
@Data
public class Task {
enum Status{DONE,IN_PROGRESS,OPEN,REOPENED}
@Id
private long id;
@NaturalId
private String taskKey;
private Status status;
private int initEstimation;
@Embedded
Progress progress;
}
答案 0 :(得分:0)
关注https://docs.jboss.org/hibernate/orm/5.0/javadocs/org/hibernate/annotations/NaturalId.html @NaturalId注释似乎是一种在DDL生成期间指定要使用的表的约束的方法。
如果是这样,JPA实现相同目的的方法是在表定义的注释中直接使用@UniqueConstraint(columnNames = {“TASKKEY”})自定义约束,如下所示: JPA - defining multi-column unique constraints
JPA不允许标记映射不可变,但您可以将映射中的字段标记为insertable = false,updatable = false。 EclipseLink还有一个@Mutable注释,如下所述: https://www.eclipse.org/eclipselink/documentation/2.5/jpa/extensions/a_mutable.htm
答案 1 :(得分:0)
@cacheindex时,如果搜索是通过自然ID而不是通过定义的@id进行的,则可以获得L2缓存命中,从而使jpa查询受益。当然,这只会有益于单个结果查询。如果要获取结果列表查询甚至没有索引查询的缓存命中,可以在eclipselink中进行查询缓存