私はネットで他のすべてのオプションを試しました。しかし、TicketsとMessagesテーブル(外部キーマップ)の両方に同時にレコードを挿入することができませんでした。なぜhibernateが子テーブルに挿入されないのですか?
何が間違っているのか分かりますか?コードを実行すると、チケットテーブルにのみレコードがあり、メッセージテーブルには記録されません。以下は
Ticket.class
以下@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;
}
}
は以下Message.class
@Entity
@Table(name = "message")
public class Message {
@Id
@Column(name = "message_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int message_id;
@Column(name = "ticket_id")
private int ticket_id;
@Column(name = "message_text")
private String message_text;
@JoinColumn(name = "ticket_id", insertable = false, updatable = false)
@ManyToOne(cascade=CascadeType.ALL)
private Ticket ticket;
public Ticket getTicket() {
return ticket;
}
public void setTicket(Ticket ticket) {
this.ticket = ticket;
}
public int getMessage_id() {
return message_id;
}
public void setMessage_id(int message_id) {
this.message_id = message_id;
}
public int getTicket_id() {
return ticket_id;
}
public void setTicket_id(int ticket_id) {
this.ticket_id = ticket_id;
}
public String getMessage_text() {
return message_text;
}
public void setMessage_text(String message_text) {
this.message_text = message_text;
}
}
ですテスト()
public static void test() {
Session session = HibernateSession.getHibernateSession();
Transaction t = session.beginTransaction();
Ticket ticket = new Ticket();
ticket.setTicket_desc("ticket description 2");
Set<Message> messages = new HashSet<Message>();
Message message = new Message();
message.setMessage_text("This is message text 2");
message.setTicket(ticket);
messages.add(message);
ticket.setMessage(messages);
session.persist(ticket);
t.commit();
}
はあなたが間違っているものを識別することができますがありますか?コードを実行すると、チケットテーブルにのみレコードがあり、メッセージテーブルには記録されません。
が@OneToMany(fetch = FetchType.LAZY, mappedBy = "ticket")
Set<Message> message = new HashSet<Message>();
あなたはカスケード操作を行いたいなら、あなたは
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "ticket")
Set<Message> message = new HashSet<Message>();
カスケード操作であることを指定する必要があります。