Мне нужно настроить hibernate, чтобы избежать создания повторяющихся строк (хотя существует строка, она создает новую, и, поскольку установлена только одна поданная, все остальное равно NULL)
Скажем, у меня есть строка, следующая за
id des index age
1 MyName 2 23
Хотя я просто установил MyName как des, и он уже существует в спящем режиме таблицы имен создайте новую строку следующим образом
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
, хотя спящий режим принимает его, но все же у меня такая же проблема.
Есть ли другой способ сделать это? Версия моего спящего режима выглядит следующим образом:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.2.1.Final</version>
<type>jar</type>
</dependency>
* Основываясь на комментариях Ray, назначая значение Id дочернего класса, он работает правильно, но как насчет того, если у меня нет идентификатора? мне нужно сделать выбор, чтобы сначала найти идентификатор? Есть ли способ заставить hibernate делать это автоматически r на основе значений дочернего класса rahter, чем отдельный выбор, чтобы найти идентификатор? *
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();
}