Java 为什么hibernate不在子表中插入?

Java 为什么hibernate不在子表中插入?,java,hibernate,Java,Hibernate,我尝试过网络上的所有其他选择。但无法同时在票证和消息表(外键映射)中成功插入记录 你能找出什么地方出了问题吗?当我运行代码时,我只在tickets表中获取记录,而不在messages表中获取记录 下面是机票 @Entity @Table(name = "ticket") public class Ticket { @Id @Column(name = "ticket_id") @GeneratedValue(strategy = GenerationType.IDENT

我尝试过网络上的所有其他选择。但无法同时在票证和消息表(外键映射)中成功插入记录

你能找出什么地方出了问题吗?当我运行代码时,我只在tickets表中获取记录,而不在messages表中获取记录

下面是机票

@Entity
@Table(name = "ticket")
public class Ticket {

    @Id
    @Column(name = "ticket_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    int ticket_id;

    @Column(name = "ticket_desc")
    String ticket_desc;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "ticket")
    Set<Message> message = new HashSet<Message>();

    public int getTicket_id() {
        return ticket_id;
    }

    public void setTicket_id(int ticket_id) {
        this.ticket_id = ticket_id;
    }

    public String getTicket_desc() {
        return ticket_desc;
    }

    public void setTicket_desc(String ticket_desc) {
        this.ticket_desc = ticket_desc;
    }

    public Set<Message> getMessage() {
        return message;
    }

    public void setMessage(Set<Message> message) {
        this.message = message;
    }

}
下面是测试()

公共静态无效测试(){
会话会话=HibernateSession.getHibernateSession();
事务t=session.beginTransaction();
票证=新票证();
票证。设置票证描述(“票证描述2”);
Set messages=new HashSet();
消息消息=新消息();
message.setMessage_text(“这是消息文本2”);
消息。设置票证(票证);
消息。添加(消息);
ticket.setMessage(消息);
会话。持续(票据);
t、 提交();
}

你能找出什么地方出了问题吗?运行代码时,我只在tickets表中获取记录,而不在messages表中获取记录。

原因是您的映射没有级联persist操作,请参阅:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "ticket")
Set<Message> message = new HashSet<Message>();
@OneToMany(fetch=FetchType.LAZY,mappedBy=“ticket”)
Set message=new HashSet();
如果希望发生级联操作,则需要指定

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "ticket")
Set<Message> message = new HashSet<Message>();
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“ticket”)
Set message=new HashSet();
级联操作非常有用,但要注意它们潜在的副作用,特别是当您修改了
票据
,而您并不打算将操作级联到
消息


如果要分别管理
消息
票证
的持久化状态,则需要修改业务逻辑代码以持久化
消息
s,然后持久化
票证

原因是映射没有级联持久化操作,请参阅:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "ticket")
Set<Message> message = new HashSet<Message>();
@OneToMany(fetch=FetchType.LAZY,mappedBy=“ticket”)
Set message=new HashSet();
如果希望发生级联操作,则需要指定

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "ticket")
Set<Message> message = new HashSet<Message>();
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“ticket”)
Set message=new HashSet();
级联操作非常有用,但要注意它们潜在的副作用,特别是当您修改了
票据
,而您并不打算将操作级联到
消息

如果要分别管理
消息
票据
的持久化状态,则需要修改业务逻辑代码以持久化
消息
s,然后持久化
票据