Wie kann vermieden werden, dass eine neue Zeile erstellt wird, wenn eine ähnliche Zeile vorhanden ist?

Ich muss den Ruhezustand konfigurieren, um zu vermeiden, dass doppelte Zeilen erstellt werden (obwohl die Zeile vorhanden ist, wird eine neue erstellt, und da nur ein Feld festgelegt ist, wird der gesamte Rest auf NULL festgelegt).

Nehmen wir an, ich habe eine Reihe wie folgt

id des    index age
1  MyName 2     23

Obwohl ich MyName gerade als des festgelegt habe und es bereits in der Namenstabelle vorhanden ist, erstellen Sie im Ruhezustand eine neue Zeile wie folgt

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

Wenn ich sa wollen. Daher habe ich meiner Klasse die folgende Anmerkung hinzugefügt, aber sie hat die Entität und dynamicUpdate überschritten.

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

ich benutzte@DynamicUpdate auch im Winterschlaf akzeptiere ich es aber trotzdem habe ich das gleiche Problem.

Gibt es eine andere Methode, um es zu tun? Die Version meines Ruhezustands lautet wie folgt

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

*Basierend auf Rays Kommentar blies: Durch Zuweisen eines Wertes zur ID der Kinderklasse funktioniert es ordnungsgemäß, aber wie wäre es, wenn ich die ID nicht habe? Muss ich zuerst eine Auswahl treffen, um die ID zu finden? Gibt es eine Methode, die den Ruhezustand dazu zwingt, dies automatisch basierend auf Werten der untergeordneten Klasse zu tun, anstatt eine separate Auswahl zu treffen, um die ID zu finden? *

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();
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage