Когда я создаю новый объект без идентификатора и сохраняю его в базе данных, объект получает идентификатор, отличный от идентификатора в базе данных.ID генерируется с помощью последовательности в Oracle.Любой совет, как решить это?Спасибо за ответ.
Пример: я создаю обзор DiReview = new DiReview ().Я правильно установил все поля, кроме идентификатора. Я хочу, чтобы hibernate сохранялся через getSessionFactory (). GetCurrentSession (). Persist (), просматривал базу данных, и я хочу, чтобы hibernate установил правильный идентификатор.Предположим, что последний идентификатор, сгенерированный последовательностью оракула, был 25, поэтому я предполагаю, что новая строка в таблице DI_REVIEW будет 26. После сохранения и принятия в таблицу действительно сохраняется новая строка с идентификатором 26, но для идентификатора поля в обзоре установленодругой номер.В моем случае, например, 2000!Это нормально?
Эта проблема в моем случае связана не только с DiReview, но и со всеми моими сущностями.Когда я загружаю сущности из базы данных, они загружаются с идентификатором corect.
Редактировать - я пытался реализовать этот пример , используя оракул и последовательность, и по крайней мере теперь я знаю, что это не нормальное поведение; -)
@Entity
@Table(name = "DI_REVIEW", uniqueConstraints = @UniqueConstraint(columnNames = {
"OBJECT_ID", "USER_ID" }))
public class DiReview{
private Long id;
private DiUser user;
private DiObject object;
private String text;
private Date createDate;
private Set<DiRating> ratings = new HashSet<DiRating>(0);
private Set<DiReviewContext> reviewContexts = new HashSet<DiReviewContext>(
0);
private Collection<DiReviewContext> reviewContextsList = new ArrayList<DiReviewContext>();
private Set<DiComment> comments = new HashSet<DiComment>(0);
public DiReview() {
}
public DiReview(Long id, DiUser user, DiObject object, String text,
Date createDate) {
this.id = id;
this.user = user;
this.object = object;
this.text = text;
this.createDate = createDate;
}
@Id
@Column(name = "ID", unique = true, nullable = false, precision = 18, scale = 0)
@SequenceGenerator(name = "di_review_seq", sequenceName = "DI_REVIEW_SEQ")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "di_review_seq")
public Long getId() {
return this.id;
}
getters and setters ..
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((createDate == null) ? 0 : createDate.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((object == null) ? 0 : object.hashCode());
result = prime * result + ((text == null) ? 0 : text.hashCode());
result = prime * result + ((user == null) ? 0 : user.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
DiReview other = (DiReview) obj;
if (createDate == null) {
if (other.createDate != null)
return false;
} else if (!createDate.equals(other.createDate))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (object == null) {
if (other.object != null)
return false;
} else if (!object.equals(other.object))
return false;
if (text == null) {
if (other.text != null)
return false;
} else if (!text.equals(other.text))
return false;
if (user == null) {
if (other.user != null)
return false;
} else if (!user.equals(other.user))
return false;
return true;
}
@Override
public String toString() {
return "DiReview [id=" + id + ", user=" + user + ", object=" + object
+ ", text=" + text + ", createDate=" + createDate + "]";
}
}
public T makePersistent(T entity) {
try {
getSessionFactory().getCurrentSession().persist(entity);
} catch (Exception e) {
e.printStackTrace();
}
return entity;
}