EclipseLink相当于Hibernate @NaturalID

时间:2015-10-13 13:41:25

标签: java hibernate eclipselink

直到今天我还没有使用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;
}

2 个答案:

答案 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中进行查询缓存