Java 插入具有多对一关系的Hibernate实体

Java 插入具有多对一关系的Hibernate实体,java,hibernate,insert,entity,Java,Hibernate,Insert,Entity,我对Hibernate还比较陌生,对于实体有FK时如何处理插入有疑问;特别是如何创建要插入的实体 我的实体简化了以下结构: @Entity @Table(name="event") public class Event implements java.io.Serializable { private int id; private int eventType private User user; public Event (i

我对Hibernate还比较陌生,对于实体有FK时如何处理插入有疑问;特别是如何创建要插入的实体

我的实体简化了以下结构:

@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 User 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;
    }
    ...
}
现在,我想持久化一个新事件,并且我将UserID与该事件的用户关联起来

我需要创建如下内容:

Event eventToInsert = new Event(45,6,  *User object I don't have*);
Event eventToInsert = new Event(45,6, Hibernate.getEntity(UserTable, UserIdValue);
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private final Set<Event> events = new HashSet<Event>();
稍后告诉hibernate将事件保存到Insert

我的问题是我只有UserID,但要创建事件,我需要整个User对象,而不仅仅是它的ID

因此,问题是:

-这是设计上的错误吗?事件是否应该只有“int userID”字段而不是“User User”

-Hibernate有办法解决这个问题吗?比如:

Event eventToInsert = new Event(45,6,  *User object I don't have*);
Event eventToInsert = new Event(45,6, Hibernate.getEntity(UserTable, UserIdValue);
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private final Set<Event> events = new HashSet<Event>();
-哪一种方法最合适


感谢您的帮助。

您应该能够为用户设置一对多,例如:

Event eventToInsert = new Event(45,6,  *User object I don't have*);
Event eventToInsert = new Event(45,6, Hibernate.getEntity(UserTable, UserIdValue);
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private final Set<Event> events = new HashSet<Event>();
@OneToMany(mappedBy=“user”,fetch=FetchType.LAZY)
私有最终集事件=新HashSet();
然后,您只需要根据您拥有的Id获取用户,将事件添加到集合中,然后持久化。我认为这应该行得通

Event eventToInsert = new Event(45, 6, (User) session.load(User.class, userIdValue));
但是如果您不知道Session.load和Session.get,我建议您阅读。这是最基本的东西:通过主键加载实体

另外,请注意,在manytone上有一个级联是很奇怪的:这意味着每次修改用户的某个事件时,都有可能创建/修改该用户