Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有基于非Id字段合并的JPA功能?_Java_Hibernate_Jpa - Fatal编程技术网

Java 是否有基于非Id字段合并的JPA功能?

Java 是否有基于非Id字段合并的JPA功能?,java,hibernate,jpa,Java,Hibernate,Jpa,我正在构建的服务接收来自外部系统的数据,该系统带有供应商的“外部ID”。当我在数据库中保存此数据时,我也会为其分配一个自动生成的ID: @Entity public class Content { @Id @GeneratedValue private Long id; private Long externalId; // many other fields } 当外部系统重新发送相同内容(具有相同的外部ID)的数据时,它将反序列化为分离的内容POJO: Conten

我正在构建的服务接收来自外部系统的数据,该系统带有供应商的“外部ID”。当我在数据库中保存此数据时,我也会为其分配一个自动生成的ID:

@Entity
public class Content {

  @Id
  @GeneratedValue
  private Long id;

  private Long externalId;

 // many other fields
}
当外部系统重新发送相同内容(具有相同的外部ID)的数据时,它将反序列化为分离的内容POJO:

Content c = deserialize(json);

是否有类似于
EntityManager.merge
的东西可以使用
externalId
字段而不是
id
字段从数据库加载和更新相应的行?

几乎可以,但是如果外部客户端不知道您的id,您必须使用查询来获取实体(实际上只需要实体的id). 一旦有了id,就可以在分离的实体上设置它并进行合并


希望这有帮助。

我想没有。您可能需要通过createQuery查找实体;这可能会在externalId上强制创建索引。尽管如此,这是一个有趣的问题