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