Как избежать создания новой строки, если подобная строка существует?
Мне нужно настроить 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();
}