Wie zu vermeiden, erstellen eine neue Zeile, wenn ähnliche Zeile vorhanden ist?

Muss ich konfigurieren Sie den Ruhezustand, um zu vermeiden, doppelte Zeilen (obwohl die Zeile vorhanden ist, erstellt es eine neue, und da nur ein Feld gesetzt, alle rest auf NULL)

Können sagen, ich habe eine Zeile wie folgende

id des    index age
1  MyName 2     23

Obwohl ich nur set MyName als des und es bereits in der Name der Tabelle überwintern
erstellen Sie eine neue Zeile wie die folgende

id des    index age
1  MyName 2     23
2  MyName Null  Null     << new row with null values will be created 
                            rather than updating the previous one

Kann, wenn ich möchte sa
.
So habe ich die folgende Anmerkung zu meiner Klasse, doch es überquerte die Entität, und dynamicUpdate.

@org.hibernate.annotations.Entity(
  dynamicUpdate = true
)

Ich verwendet @DynamicUpdate so gut, obwohl hibernate akzeptieren es aber noch immer habe ich das gleiche problem.

Gibt es eine andere Methode, es zu tun ? Version von mein Ruhezustand ist wie folgt

<dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>4.2.1.Final</version>
      <type>jar</type>
</dependency>

*Basierend auf Ray ' s Kommentar blies, Durch zuweisen eines Werts-Id der Kind-Klasse, es funktioniert einwandfrei aber wie wäre es, wenn ich nicht die ID? tun ich habe zu tun, einen zu finden, wählen Sie die id der erste ? Gibt es irgendeine Methode, um Kraft hibernate zu tun es automatisch r basierend auf den Werten der untergeordneten Klasse rahter, als bei einem separaten wählen Sie finden die id? *

User.Java

....
import org.hibernate.annotations.DynamicUpdate;

@Entity
@Table(name = "user") 
@DynamicUpdate
public class User implements Serializable {

  private int ID;
  private Name name;
  private String type;

  public User() {
  }

  @Id
  @GeneratedValue
  @Column(name = "id")
  public int getID() {
     return ID;
  }

  public void setID(int ID) {
     this.ID = ID;
  }

  @ManyToOne(cascade = CascadeType.ALL)
  public Name getName() {
     return name;
  }

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

  .....

Name.Java

@Entity()
@Table(name = "Name")
public class Name implements Serializable {

private int id;
private String des;
private String index;
private String age;

public Name() {
}

@Id
@GeneratedValue
@Column(name="id", unique= true, nullable = false)
public int getId() {
    return id;
}

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

.....

Model.java

public void addMyUsers(){
   Name name = new Name();
   name.setDes("MyName");
   While( ..... )
   {
       User user = new User();
       user.setName(name);
       user.setType(X);
       addUser(user);
   }
}

public void addUser(User user) {
        session = Util.getSession();

        session.beginTransaction();


        session.merge(user); 
        //session.saveOrUpdate(user);

        session.getTransaction().commit();

        session.close();
}
Siehe stackoverflow.com/q/8935975/1700321.
vielen Dank ich habe gelesen, dass, bevor nicht eine Lösung nur erwähnt, dass diese tags sind veraltet.
Auf 4.2.1, es funktioniert, aktualisieren Sie auf neueste, wenn möglich.
das ist also tatsächlich eine doppelte.
die Antwort, die Frage ist falsch, da diese tags sind nicht veraltet. Denn niemand ist in der Lage, um anzuzeigen, dass die Frage, die ich öffne eine neue Frage

InformationsquelleAutor | 2013-06-13

Schreibe einen Kommentar