我有以下情况:假设我有一个实体“Event”,其中包含一组带有@OneToMany映射的“Place”实体对象。
@Entity
public class Event {
@Id
@GeneratedValue(strategy=Generation.AUTO)
@JoinColumn
private Long id = 0L;
@OneToMany(cascade=CascadeType.ALL, fetch=Fetch.EAGER)
@JoinColumn(name="event_id")
@org.hibernate.annotations.Cascade (value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Set<Place> places = new HashSet<Place>();
}
@Entity
public class Place {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@JoinColumn
private Long id = 0L;
private String name;
private Long placeId = 0L;
}
我也在运行Spring 3.X并使用AnnotationSessionFactoryBean作为我的会话工厂。这两个实体都在此类的annotatedClasses属性中正确列出。
我创建(通过我的Web应用程序)带有地点和保存的新事件。 Event和Place表中都有一个新条目符合预期。接下来,我创建另一个与第一个事件位置相同的新事件。这次当我尝试保存时,我得到一个NonUniqueObjectException。第一个地方的主要关键是作为问题被注意到。似乎没有为第二个位置创建“新”ID。换句话说,它正在重复使用ID。我期待在地方表中创建第二行,但事实并非如此。
有什么想法吗?
答案 0 :(得分:0)
如果您尝试更换,该怎么办?
@GeneratedValue(strategy=Generation.AUTO)
与
@GeneratedValue(strategy=GenerationType.AUTO)
答案 1 :(得分:0)
如果某个事件可能发生在很多地方,则您需要在OneToMany
和Event
实体之间建立Place
关联。使用OneToMany
关联时,您无法在Place
之间重复使用Event
你必须使用ManyToMany
关联来做到这一点。
标准 OneToMany
双向关联。
@Entity
public class Event
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany(mappedBy="event", orphanRemoval=true, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Place> places = new HashSet<Place>();
}
@Entity
public class Place
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@ManyToOne
@JoinColumn(name="event_id")
private Event event;
}
...
//create event#1 and a place #1Event event1 = new Event();
Place place1 = new Place();
event1.getPlaces().add(place1);
place1.setEvent(event1);
entitymanager.persist(event1);
//create event#2 and place #2 and place #3
Event event2 = new Event();
Place place2 = new Place();
Place place3 = new Place();
event2.getPlaces().add(place2);
place1.setEvent(event2);
event2.getPlaces().add(place3);
place3.setEvent(event2);
entitymanager.persist(event2);
有关映射实体之间关联的更多信息,请参阅Hibernate Reference文档部分2.2.5. Mapping entity associations/relationship。