Jak uniknąć tworzenia nowego wiersza, jeśli istnieje podobny wiersz?

Muszę skonfigurować hibernację, aby uniknąć tworzenia zduplikowanych wierszy (chociaż wiersz istnieje, tworzy nowy wiersz, a ponieważ ustawiono tylko jeden wiersz, należy ustawić całą resztę na NULL)

Powiedzmy, że mam wiersz następujący

id des    index age
1  MyName 2     23

Chociaż ustawiłem MyName jako des i już istnieje w hibernacji tabeli Nazwa, utwórz nowy wiersz w następujący sposób

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

Kiedy chcę być. Dodałem więc następującą adnotację do mojej klasy, ale przekroczyła ona Entity i dynamicUpdate.

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

użyłem@DynamicUpdate również, chociaż hibernacja to akceptuje, ale nadal mam ten sam problem.

Czy jest jakaś inna metoda, aby to zrobić? Wersja mojego hibernacji jest następująca

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

*Na podstawie komentarza Ray'a wiał, Przez przypisanie wartości do Id klasy dziecka działa poprawnie, ale co powiesz na to, jeśli nie mam identyfikatora? muszę najpierw wybrać, aby znaleźć identyfikator? Czy istnieje jakaś metoda wymuszenia hibernacji, aby zrobić to automatycznie na podstawie wartości klasy potomnej rahter niż wykonanie osobnego wyboru, aby znaleźć identyfikator? *

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

  .....

Imię.Jawa

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

questionAnswers(4)

yourAnswerToTheQuestion