Как избежать создания новой строки, если подобная строка существует?

Мне нужно настроить hibernate, чтобы избежать создания дублирующихся строк (хотя строка существует, она создает новую, и, поскольку установлена только одна область, все остальные устанавливаются в NULL)

Допустим, у меня есть ряд следующим образом

id des    index age
1  MyName 2     23

Хотя я просто установил MyName как des, и он уже существует в таблице имен hibernate, создайте новую строку следующим образом

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

Когда я хочу к са. Поэтому я добавил следующую аннотацию к своему классу, но она пересекла Entity и dynamicUpdate.

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

я использовал@DynamicUpdate как хорошо, хотя hibernate это принимает, но все же у меня та же проблема.

Есть ли другой способ сделать это? Версия моего спящего такова

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

*Основываясь на комментарии Рэя, присваивая значение Id дочернего класса, оно работает правильно, но как насчет того, если у меня нет идентификатора? я должен сделать выбор, чтобы сначала найти идентификатор? Есть ли способ заставить hibernate сделать это автоматически, основываясь на значениях дочернего класса, чем делать отдельный выбор, чтобы найти идентификатор? *

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

Ответы на вопрос(4)

Ваш ответ на вопрос