SQL журналы:
Hibernate: insert into author (...)
Hibernate: insert into "user" (...)
Hibernate: select author0_.id...
Hibernate: select user0_.id...
Hibernate: insert into book (...)
Hibernate: update book set...
Итак, я попытался создать новую книгу с новой ссылкой на автора и «ссылкой» пользователя, который одолжил книгу.
Я не понимаю, почему сущность книги обновляется после вставки. Я также использую optimisti c для управления версиями для авторов и пользователей, но проблем нет.
@Data
@NoArgsConstructor
@MappedSuperclass
@TypeDefs({
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
})
public abstract class StandardEntity implements Serializable {
}
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@MappedSuperclass
public abstract class IdentifiableEntity extends StandardEntity {
@Id
@GeneratedValue
@Column(columnDefinition = "uuid", updatable = false)
private UUID id;
}
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class AuditableEntity extends IdentifiableEntity {
@CreatedDate
private LocalDateTime created;
@CreatedBy
private String createdBy;
@LastModifiedDate
private LocalDateTime modified;
@LastModifiedBy
private String modifiedBy;
private LocalDateTime deleted;
@Version
private long version;
public AuditableEntity(UUID id) {
super(id);
}
}
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Author extends AuditableEntity {
@NotNull
private String code;
private String title;
public Author(UUID id) {
super(id);
}
}
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Book extends AuditableEntity {
@ManyToOne
@JoinColumn(name = "author_id", nullable = false)
private Author author;
private String title;
private String borrower;
@Type(type = "jsonb")
private Map<String, Object> details;
@Type(type = "jsonb")
private Set<Custom1Dto> pages;
@Type(type = "jsonb")
private List<Custom2Dto> components;
@NotNull
@Enumerated(EnumType.STRING)
private BookStatus status;
public Book(UUID id) {
super(id);
}
}
Поэтому я хочу знать, почему происходит обновление книги . Почему спящий режим увеличивает версию текущего вставленного объекта.
ОБНОВЛЕНИЕ
Я заметил, что если я закомментирую коллекцию компонентов, проблема с обновлением исчезнет.
ОБНОВЛЕНИЕ
Похоже, проблема была с Custom2Dto
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Custom2Dto extends StandardDto {
private String title;
}
и StandardDto
public abstract class StandardDto implements Serializable {
}
RESLVED
добавление @EqualsAndHashCode
в StandardD для решения проблемы
@Data
@NoArgsConstructor
@ToString
@EqualsAndHashCode
public abstract class StandardDto implements Serializable {
}