Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 使用Hibernate保存列表更改_Java_Database_Hibernate - Fatal编程技术网

Java 使用Hibernate保存列表更改

Java 使用Hibernate保存列表更改,java,database,hibernate,Java,Database,Hibernate,我有一个名为Token的对象。它具有id、名称和值。在将一些数据保存到db之后,我将它们加载到一个网页中 _____________________________________________ |____name____|____value____|____operation____| tkn1 10 × tkn2 20 × ×符号使我能够从服务器集合中删除令牌 现在。我添加了值为30的

我有一个名为Token的对象。它具有id、名称和值。在将一些数据保存到db之后,我将它们加载到一个网页中

_____________________________________________
|____name____|____value____|____operation____|
   tkn1          10               ×
   tkn2          20               ×
×
符号使我能够从服务器集合中删除令牌 现在。我添加了值为30的令牌tkn3,并删除了
tkn2
so 该表将是:

_____________________________________________
|____name____|____value____|____operation____|
   tkn1          10               ×
   tkn3          30               ×
对集合进行这些更改后,如何将它们反映到数据库中 如何确定删除的记录和添加的记录

我应用了两种解决方案:

  • 我在业务逻辑层比较了旧数据和新数据 并找出两个列表之间的差异,然后发送到数据库,第一个列表包含 添加的令牌和第二个令牌包含要删除的令牌的ID
  • 我向对象添加了一个名为status的标志。。当我添加标志时,它是新的 当我删除时,我只是将flag设置为delete,在DB层中,我迭代集合 逐个对象并检查标志。。如果是新的,则添加记录;如果是删除的,则删除记录 如果保存(无更改),我不会对其进行更改
  • 我的问题是:

    • 这样做对完成这项任务有好处吗
    • 是否有一种模式来完成这项任务
    • Hibernate能帮我吗

    •这种方法对完成这项任务有好处吗。。? 没有

    •是否有完成此任务的模式? 对

    •Hibernate能帮我做到这一点吗? Hibernate使用列表属性的级联属性为这种情况提供了解决方案

    提及


    blow实体应该可以解决您的问题

    @Entity
    public class MyEntity {
    
    private static enum Status {
        NEW,
        PERSISTENT,
        REMOVED
    }
    
    @Id
    private Long id;
    
    private String name;
    private int value;
    
    @Transient
    private Status uiStatus = Status.NEW;
    
    public Long getId() {
        return this.id;
    }
    
    public String getName() {
        return this.name;
    }
    
    public Status getUiStatus() {
        return this.uiStatus;
    }
    
    public int getValue() {
        return this.value;
    }
    
    @PostLoad
    public void onLoad() {
        this.uiStatus = Status.PERSISTENT;
    }
    
    public void setId(Long id) {
        this.id = id;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public void setUiStatus(Status uiStatus) {
        this.uiStatus = uiStatus;
    }
    
    public void setValue(int value) {
        this.value = value;
    }
    }