2011-03-23 168 views
2

我是相当新的Hibernate和对当实体有FK如何处理插入一个问题;具体如何创建要插入的实体。插入一个Hibernate实体与许多一对一的关系

我的实体具有以下结构简化:

@Entity 
@Table(name="event") 
public class Event implements java.io.Serializable { 

    private int id; 
    private int eventType 
    private User user; 

    public Event (int id, int eventType, User user) { 
     this.id = id; 
     this.eventType = eventType; 
     this.user = user; 
    } 

    @Id 
    @Column(name="ID") 
    public int getId() { 
     return this.id; 
    } 

    @Column(name="EVENT_TYPE", nullable=false) 
    public int getEventType() { 
     return this.eventType; 
    } 

    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, targetEntity=User.class) 
    @JoinColumn(name="USER_ID") 
    public User getUser() { 
     return this.user; 
    } 
    ... 
} 

----------- 

@Entity 
@Table(name="user") 
public class Event implements java.io.Serializable { 

    private int id; 
    private String name; 

    public User (int id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

    @Id 
    @Column(name="ID") 
    public int getId() { 
     return this.id; 
    } 

    @Column(name="Name", nullable=false) 
    public String getName() { 
     return this.name; 
    } 
    ... 
} 

现在我想坚持一个新的事件,我有asociated该事件的用户的用户名。

我需要创造这样的:

Event eventToInsert = new Event(45,6, *User object I don't have*); 

后来告诉Hibernate保存eventToInsert。

我的问题是我只有用户ID,但创建事件,我需要整个用户对象,不仅是其ID。

所以,问题:这个

-Is了一个设计缺陷?应该事件只有'int userID'字段而不是'用户用户'?

-Does休眠有什么办法来处理这个问题呢?例如:

Event eventToInsert = new Event(45,6, Hibernate.getEntity(UserTable, UserIdValue); 

- 这将是适当的方式做到这一点?

感谢您的任何帮助。

回答

0
Event eventToInsert = new Event(45, 6, (User) session.load(User.class, userIdValue)); 

但是,如果你不知道Session.load和Session.get,我建议你阅读Hibernate documentation。这是最基本的东西:通过主键加载实体。

另外请注意,有一个多对一的级联是奇怪的:它意味着你有可能创建/每次修改它的事件之一时修改用户。

1

你应该能够把一个一对多的用户,是这样的:

@OneToMany(mappedBy = "user", fetch = FetchType.LAZY) 
private final Set<Event> events = new HashSet<Event>(); 

那么你就只需要通过你的ID来获得用户,事件添加到集合中,并坚持下去。我相信这应该工作。

相关问题