0

私は次のことを達成したい:

ユーザーは、タイトルと説明を付けてメッセージを投稿できます。また、メール アドレス、電話番号、またはその両方を残すこともできます。

彼のメッセージに関する情報を、列 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>
4

1 に答える 1

1
@OneToOne(cascade=CascadeType.ALL)
private Contact contact;

この意味は:

  • メッセージごとに 1 つの連絡先があります (1 つの連絡先は 1 つのメッセージだけで使用されます)。
  • Message に対して保存、更新、または削除操作を実行すると、その操作は contact テーブルにカスケードされます。
于 2013-02-05T06:07:46.710 に答える