2011-03-23 210 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來獲得用戶,事件添加到集合中,並堅持下去。我相信這應該工作。

相關問題