更新ArrayList仍保留其原始值

时间:2014-06-10 07:45:53

标签: java jpa arraylist entity ebean

美好的一天!我在更新实体时遇到问题。单击“更新”按钮时,将保存更改。但是,当我去另一个页面时,最近更改(或添加)的项目在那里,但旧项目(应该更改或删除)也在那里。特别是 relatedTags namenotes正在更新就好了)。为什么不持久或永久?

这是更新的地方。

Form<Tag> filledForm = tagForm.fill(Tag.find.byId(id)).bindFromRequest();
            Tag editedTag = RelatedTag.findTag(id);
            if(filledForm.hasErrors()) {
                return badRequest(editTagForm.render(user, editedTag, filledForm, tags));
            }
            else {

                List<RelatedTag> relatedTagsAlloc = new ArrayList<RelatedTag>();

                java.util.Map<String, String[]> map = request().body().asFormUrlEncoded();
                String[] relatedTags = map.get("relatedTags.tag.name");
                String[] relationship = map.get("relatedTags.relationship");
                String[] relatedNotes = map.get("relatedTags.relatedNotes");

                if (relatedTags != null) {
                    for (int i = 0; i < relatedTags.length; i++) {
                        if (RelatedTag.exists(relatedTags[i].trim().toLowerCase().replaceAll("\\s+", " "))) {
                            relatedTagsAlloc.add(RelatedTag.findByLabel(
                                    relatedTags[i].trim().toLowerCase().replaceAll("\\s+", " "), relationship[i], relatedNotes[i].trim()));
                        } else {
                            Tag unknown = new Tag(relatedTags[i], "");
                            Tag.create(unknown);
                            relatedTagsAlloc.add(RelatedTag.findByLabel(
                                    relatedTags[i].trim().toLowerCase().replaceAll("\\s+", " "), relationship[i], relatedNotes[i].trim()));
                        }
                    }
                    editedTag.getRelatedTags().clear();

                }
                editedTag.setName(filledForm.get().getName().toLowerCase().replaceAll("\\s+", " "));
                editedTag.setRelatedTags(relatedTagsAlloc);
                editedTag.update();
                Application.log(user, editedTag, action);
                writeToFile(editedTag);
                return ok(summary.render(user, editedTag));
            }

以下是模特:

Tag型号:

package models;

import java.sql.Timestamp;
import java.util.*;

import javax.persistence.*;
import javax.validation.*;

import play.data.Form;
import play.data.validation.Constraints.*;
import play.db.ebean.*;
import play.db.ebean.Model.Finder;
import scala.Int;

@Entity
public class Tag extends Model{

    @Id
    private int id;

    @Required
    @MaxLength(value=100)
    @Column(unique=true)
    private String name;

    @MaxLength(value=200)
    private String notes;

    @OneToMany(cascade=CascadeType.ALL)
    public List<RelatedTag> relatedTags = new ArrayList<RelatedTag>();

    @Version
    public Timestamp lastUpdate;

    public static Finder<Integer, Tag> find = new Finder(Int.class, Tag.class);

    public Tag() {

    }

    public Tag(String name, String notes){
        this.name = name;
        this.notes = notes;
    }

    public Tag(int id, String name, String notes, List<RelatedTag> relatedTags) {
        this.id = id;
        this.name = name;
        this.notes = notes;
        this.relatedTags = relatedTags;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNotes() {
        return notes;
    }

    public void setNotes(String notes) {
        this.notes = notes;
    }

    public List<RelatedTag> getRelatedTags() {
        return relatedTags;
    }

    public void setRelatedTags(List<RelatedTag> relatedTags) {
        this.relatedTags = relatedTags;
    }

    public static List<Tag> all() {
        return find.all();
    }

    public static void create(Tag tag){
        tag.save();
    }

    public static void delete(int id){
        find.ref(id).delete();
    }

    public static void update(int id, Tag tag) {
        tag.update(id); // updates this entity, by specifying the entity ID
    }

    public static boolean exists(Tag newTag) {
        for(Tag allTags : Tag.find.all()) {
            if(allTags.getName().equals(newTag.getName()))
                return true;
        }

        return false;
    }       

}

RelatedTag型号

package models;

import java.sql.Timestamp;
import java.util.*;

import javax.persistence.*;
import javax.validation.*;

import play.data.Form;
import play.data.validation.Constraints.*;
import play.db.ebean.*;
import play.db.ebean.Model.Finder;
import scala.Int;

@Entity
public class RelatedTag extends Model {

    @Id
    public int rtID;

    private int id; //same as Tag's id

    private String relationship;

    private String relatedNotes;

    @Version
    public Timestamp lastUpdate;

    public RelatedTag() {}

    public RelatedTag(int id, String relationship, String relatedNotes) {
        this.id = id;
        this.relationship = relationship;
        this.relatedNotes = relatedNotes;
    }

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

    public void setRelationship(String relationship){
        this.relationship = relationship;
    }

    public void setRelatedNotes(String relatedNotes) {
        this.relatedNotes = relatedNotes;
    }

    public int getId(){
        return id;
    }


    public String getRelationship(){
        return relationship;
    }

    public String getRelatedNotes() {
        return relatedNotes;
    }

    public static void create(List<RelatedTag> rt){
        ((Model) rt).save();
    }

    public static boolean exists(String tagRelated) {
        for(Tag tag : Tag.find.all()) {
            if(tagRelated.equals(tag.getName()))
                return true;
        }
        return false;
    }

    public static RelatedTag findByLabel(String tagRelated, String relation, String relatedNotes) {
        RelatedTag relatedTag = null;
        for(Tag tag : Tag.find.all()) {
            if(tagRelated.equals(tag.getName())) {
                relatedTag = new RelatedTag(tag.getId(), relation, relatedNotes);
            }
        }
        return relatedTag;
    }

    public static Tag findTag(int id) {
        for(Tag tag : Tag.find.all()) {
            if(id == tag.getId()) 
                return tag;
        }
        return null;
    }

}

我做错了什么?请帮我解决这个问题我真的需要你的指导。非常感谢你!

0 个答案:

没有答案