¿Cómo evitar crear una nueva fila si existe una fila similar?

Necesito configurar la hibernación para evitar la creación de filas duplicadas (aunque existe una fila, crea una nueva, y dado que solo uno de los archivos está configurado, establece el resto en NULL)

Digamos que tengo una fila como la siguiente

id des    index age
1  MyName 2     23

Aunque acabo de establecer MyName como des y ya existe en la tabla de nombres hibernate, cree una nueva fila como sigue

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

Cuando quiero sa. Así que agregué la siguiente anotación a mi clase pero cruzó la Entidad y dynamicUpdate.

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

solía@DynamicUpdate También, aunque hibernate lo acepte pero igual tengo el mismo problema.

¿Hay algún otro método para hacerlo? La versión de mi hibernación es la siguiente

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

*Basado en el comentario de Ray, al asignar un valor a la Id. De la clase secundaria funciona correctamente, pero ¿qué tal si no tengo la identificación? ¿Tengo que hacer una selección para encontrar el ID primero? ¿Existe algún método para forzar la hibernación para que se realice automáticamente en función de los valores de la clase secundaria que hacer una selección separada para encontrar el ID? *

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

  .....

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta