【问题标题】:what is the hsql/jdbc equivalent to JPA Detach api? what does it exactly do?与 JPA Detach api 等效的 hsql/jdbc 是什么?它到底是做什么的?
【发布时间】:2019-12-20 15:27:31
【问题描述】:

我正在使用 JDBC 将 JPA api detach 迁移到普通 SQL,我发现很难理解 EntityManager.detach(someTask) 的概念。

我尝试使用 delete 查询进行分离,但它似乎会立即从数据库中删除整个记录。

@Entity
@Table(name = "TASK", indexes = {@Index(name = "RIO", columnList = "priority", unique = false),
@Index(name = "EXP", columnList = "expiry", unique = false), 
@Index(name = "STA", columnList = "taskStatus", unique = false),
@Index(name = "CAT", columnList = "category", unique = false),
@Index(name = "NEXTTRY", columnList = "nextTry", unique = false)})

public class TaskEntity {

@Version
private int version;

@Basic
@Column(length = Integer.MAX_VALUE, columnDefinition = "varchar(" + 
Integer.MAX_VALUE + ")")
private String taskId;

@Basic
private String category;

@ElementCollection(fetch = FetchType.EAGER)
@MapKeyColumn(name = "KEY")
@CollectionTable(name = "TASKPROPERTIES", foreignKey = @ForeignKey(
             name = "TASK_ID_FK",
             foreignKeyDefinition = "FOREIGN KEY (TASKENTITY_ID) REFERENCES TASK (ID) ON DELETE CASCADE"))

@Column(length = Integer.MAX_VALUE, columnDefinition = "varchar(" + 
Integer.MAX_VALUE + ")")
private Map<String, String> TaskProperties;

@Basic
@Column(length = Integer.MAX_VALUE, columnDefinition = "varchar(" + 
Integer.MAX_VALUE + ")")
private String destination;

@Enumerated(EnumType.STRING)
private TaskStatus taskStatus;

@Basic
private String type;

@Basic
private Long expiry;

@Basic
private Long nextTry;

@Basic
private Integer retries;

@Basic
private Integer priority;

//Setters and Getters
//Equals and HashCode

}

很难理解分离和删除之间的区别。那么在 HSQL/SQL 中分离的等效查询是什么?

【问题讨论】:

  • JDBC 中没有 detach 的等价物,你也不需要它。

标签: java sql jpa jdbc hsqldb


【解决方案1】:

要了解detach,您必须首先熟悉代理 设计模式。当您持久化或获取实体时,ORM 会为您提供一个代理,该代理会跟踪字段修改并为您提供延迟加载。

当您分离一个实体时,您告诉 ORM 您不希望它再跟踪该对象实例。因此,您在分离实体实例后对其所做的任何更改都不会反映在数据库中。

换句话说,detach() 纯粹是 ORM 的一个功能,与数据库无关,这就是为什么你找不到和 SQL 等价物 - 只是因为没有。

【讨论】:

    猜你喜欢
    • 2019-12-18
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 2013-09-02
    • 2014-01-02
    • 2013-10-10
    相关资源
    最近更新 更多