sql - PersistenceException: ERROR executing DML bindLog when Updating an Object -


good day! have 2 objects: tag , relatedtag. tag can have many relatedtags (which tag). saving tag related tags works fine. when update tag, has error saying

[persistenceexception: error executing dml bindlog[] error[unique index or primary key violation: "primary key on public.related_tag(id)"; sql statement:\n insert related_tag (id, tag_id, relationship, related_notes) values (?,?,?,?) [23505-172]]]

here tag model:

package models;  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)     private string name;      @maxlength(value=200)     private string notes;      @onetomany(cascade=cascadetype.all)     public list<relatedtag> relatedtags = new arraylist<relatedtag>();      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 entity, specifying entity id     }      public static boolean exists(tag newtag) {         for(tag alltags : tag.find.all()) {             if(alltags.getname().equals(newtag.getname()))                 return true;         }          return false;     }         } 

and here relatedtag model:

package models;  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     private int id;      private string relationship;      private string relatednotes;      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 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;     }  } 

when run (in update tag), error happens.

private static void reciprocate(tag tag) {             list<tag> peers = new arraylist<tag>();              (relatedtag rt : tag.getrelatedtags()) {                 if(rt.getrelationship().equals("peer"))                     peers.add(relatedtag.findtag(rt.getid()));             }          for(relatedtag rt : tag.getrelatedtags()) {             int reltemp = 0;             string relation = new string();             if (rt.getrelationship().equals("parent"))                 reltemp = 1;              if (rt.getrelationship().equals("child"))                 reltemp = 2;              if (rt.getrelationship().equals("peer"))                 reltemp = 3;              switch(reltemp) {                 case 1: relation = "child"; break;                 case 2: relation = "parent"; break;                 case 3: relation = "peer"; break;             }              tag related = new tag();             related = tag.find.byid(relatedtag.findtag(rt.getid()).getid());             list<relatedtag> available = new arraylist<relatedtag>();             list<string> availablename = new arraylist<string>();             (relatedtag rt2 : related.getrelatedtags()) {                 availablename.add(relatedtag.findtag(rt2.getid()).getname());             }             if(availablename.contains(tag.getname())) {                 for(relatedtag rt2 : related.getrelatedtags()) {                     if(!relatedtag.findtag(rt2.getid()).getname().equals(tag.getname())) {                         available.add(rt2);                     }                 }             }             available.add(relatedtag.findbylabel(                     tag.getname(), relation,                     rt.getrelatednotes()));             related.setrelatedtags(available);             related.update(related.getid());    //here                   } } 

please me figure out. after first rt has been iterated, there goes error saves related tag. thank much.

your method relatedtag#findbylabel creates new relatedtags ids of tag class; if have 2 related tags same tag, produce 2 related tags same id.

look @generatedvalue , entitymanager#createquery.


Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -