Como evitar a criação de uma nova linha se existir uma linha semelhante?

Eu preciso configurar o hibernate para evitar a criação de linhas duplicadas, (embora a linha exista, ele cria um novo, e como apenas um arquivo é definido, ele define todo o restante como NULL)

Vamos dizer que eu tenho uma linha como a seguir

id des    index age
1  MyName 2     23

Embora eu apenas configurei MyName como des e ele já existe na tabela Name hibernate crie uma nova linha como segue

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

Quando eu quero sa Então, adicionei a seguinte anotação à minha classe, mas ela cruzou a Entity e dynamicUpdate.

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

eu usei@DynamicUpdate também, embora hibernate aceitá-lo, mas ainda tenho o mesmo problema.

Existe algum outro método para fazer isso? Versão do meu hibernate é a seguinte

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

*Com base no comentário de Ray, ao atribuir um valor ao Id da classe filha, ele funciona corretamente, mas e se eu não tiver o ID? eu tenho que fazer um select para encontrar o id primeiro? Existe algum método para forçar o hibernate a fazê-lo automaticamente com base em valores de rahter de classe filha do que fazer uma seleção separada para encontrar o 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();
}

questionAnswers(4)

yourAnswerToTheQuestion