私は次のことを達成したい:
ユーザーは、タイトルと説明を付けてメッセージを投稿できます。また、メール アドレス、電話番号、またはその両方を残すこともできます。
彼のメッセージに関する情報を、列 id、userId、title、および description を含む 1 つのテーブルに格納したいと考えています。彼の連絡先情報に関する情報を、列 id、messageId、phoneNumber、email を含む別のテーブルに保存したいと考えています。メッセージを一覧表示できるようにしたい。メッセージごとに、電話番号とメールアドレスも印刷したいと思います。
さまざまな理由で連絡先情報を別のテーブルに保存したいのですが、メッセージと一緒にメッセージテーブルに保存できません。
これを達成するための最良の方法がわかりません。特に、メッセージの ID で連絡先情報を取得できるようにしたいことを知っています。
@OneToOne、@JoinColumn、または @SecondaryTable を使用して複数の方法を試しましたが、これを機能させることができません。
これが私が今持っているものです:
メッセージ クラス:
@Entity
@Table(name="messages")
public class Message implements Serializable {
private int idMessage;
private int userId;
private String title;
private String description;
private Contact contact;
@Id
@GeneratedValue
@Column(name="idMessage")
public int getId() {
return idMessage;
}
public void setId(int id) {
this.id = id;
}
@Column(name="userId", nullable=false)
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
@Column(name="title", nullable=false)
public int getTitle() {
return title;
}
public void setTitle(int title) {
this.title = title;
}
@Column(name="description", nullable=false)
public int getDescription() {
return userId;
}
public void setDescription(int description) {
this.description = description;
}
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE})
@JoinColumn(name="contactId", nullable=false)
public Contact getContact() {
return contact;
}
public void setContact(Contact contact) {
this.contact = contact;
}
}
編集: Contact クラスに属性を追加しmessageId
まし
た。また、Contact テーブルに列を追加し、Messages テーブルの id 列を指す外部キーを追加しました。
@Entity @Table(name="contacts") public class Contact {
private String id;
private int messageId;
private Message message;
private String phoneNumber;
private String email;
public Contact(Message message, String phoneNumber, String email) {
this.message= message;
this.phoneNumber = phoneNumber;
this.email = email;
}
@Id
@GeneratedValue
@Column(name="ID")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@OneToOne(fetch = FetchType.LAZY, mappedBy = "contact")
public Message getMessage() {
return message;
}
public void setMessage(Message message) {
this.message = message;
}
@Column(name="phoneNumber", nullable=true)
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Column(name="email", nullable=true)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
path
私のJSPコードのいくつかは、電子メールと電話番号フィールドの属性に contact.email と contact.phoneNumber を入れたことに注意してください:
<form:form method="post" commandName="ad">
<table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0"
cellpadding="5">
<tr>
<td align="right" width="20%">Title *</td>
<td width="20%"><form:input size="64" path="title" class="input-xxlarge"/></td>
<td width="60%"><form:errors path="title" cssClass="error" /></td>
</tr>
<tr>
<td align="right" width="20%">Description *</td>
<td width="20%">
<%-- <form:input path="description" /> --%> <textarea rows="3"></textarea>
</td>
<td width="60%"><form:errors path="description"
cssClass="error" /></td>
</tr>
<tr>
<td align="right" width="20%">Phone Number *</td>
<td width="20%"><form:input path="contact.phoneNumber" /></td>
<td width="60%"><form:errors path="contact.phoneNumber" cssClass="error" /></td>
</tr>
<tr>
<td align="right" width="20%">Email *</td>
<td width="20%"><form:input path="contact.email" /></td>
<td width="60%"><form:errors path="contact.email" cssClass="error" /></td>
</tr>
</table>