JPA触发在值已存在时替换插入的ID

时间:2013-02-04 18:43:29

标签: java-ee jpa triggers

我有一个网络服务,每天从各种来源获得大约9GB的原始文本数据。绝大多数是相对较短(100-300)的字符串,经常重复。我可能只有几千个独特的字符串

我通常不想进行预优化,但我们的存储问题很快就会成为开发中的问题。

我有一个JPA实体,并且为了这个帖子而简化。这是映射到父表的字符串/ id对。

@Entity
public class DeduplicatedString implements Serializable {


private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
private int id;


public int getId() {
    return id;
}




public void setId(int id) {
    this.id = id;
}

private String value;
public DeduplicatedString() {
    super();
}
public String getValue() {
    return value;
}
public void setValue(String value) {
    this.value = value;
}

}

我想设置一个JPA监听器(beforeInsert?)来在添加新字符串时检查现有数据,如果已找到完全匹配则返回现有记录。

我通常只设置一个插入触发器,并且不太确定如何在JPA中执行此操作。

谢谢!

2 个答案:

答案 0 :(得分:1)

JPA不直接支持您需要的功能。有一个@PrePersist注释(以及several others),但这些注释只能用于例如监控系统,或对实体进行最后更改。 JPA不知道在数据库中执行的任何触发器,并且目前没有机制来链接这两个触发器。

答案 1 :(得分:0)

指针是什么意思?你的意思是你不想插入记录吗?

通常,在您的应用程序中执行此操作时,您应首先使用字符串查询对象,并且只有在找不到该对象时才会保留新对象。