我有两个具有1:n关系的Foo和Bar实体:
@Entity
public class Foo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "foo_id")
Integer id;
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "foo_id")
private Set<Bar> bars;
@NotNull
@Version
@Temporal(TemporalType.TIMESTAMP)
@Column(name="update_date", nullable=false)
private Date updateDate;
// getters and setters ...
}
@Entity
public class Bar{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "bar_id")
Integer id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "foo_id")
private Foo foo;
// getters and setters ...
}
现在我将一个Bar添加到现有的Foo:
Foo foo = entityManager.find(Foo.class, 1);
Bar bar = new Bar();
entityManager.persist(bar);
foo.getBars().add(bar);
entityManager.flush();
奇怪的是,当我调用entityManager.flush()时,foo.updateDate会更新,即使数据库中应该发生的唯一事情是对Bar的新行的INSERT - 即现有的Foo行不应该被修改。 Hibernate EntityManager的这种行为是正常/有意的吗?