2017-03-21 8 views
0

私はSpring MVC WEB Appに取り組んでおり、適切な注釈を持つEntityクラスのHibernateで "良い"マッピングデザインを適用するのは難しいです。私は、Javaでデータベーステーブルを表現するための最良の設計となるものについていくつかアドバイスをしたいと思います。私の状況を理解するためのHibernateアノテーションをマッピングするための最適化された方法1対多の関係

このORMマッピングの目標は、SentMessageテーブル内の既存の非整列化されたXMLファイルを永続化するために使用されます。 FeedBackMessageテーブルでは、すでにJavaオブジェクトに解析された既存のCSVファイル(フィードバック)を保持します。

この 'バッチ処理'に基づいて、データベースレベルで受け取ったフィードバックに基づいて、どのdocumentidがステータス(ステータス)を受け取ったかを比較する必要があります。

私は次のような設計で試してみましたが、私は、データベースにデータを挿入しようとするとき、私は "戸建エンティティエラー" を得た:

SentMessageエンティティ

@Entity 
@Table(name = "SENTMESSAGES") 
public class SentMessaages{ 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "documentid") 
    private String documentid; 

    @Column(name = "documenttitle") 
    private String documenttitle; 

    @Column(name = "language") 
    private String language; 

    @Column(name = "email") 
    private String email; 

    /***************************************/ 
    Setters en Getters method 
    //****// 
} 

Feedbackmessageエンティティ

@Entity 
@Table(name = "FEEDBACKMESSAGES") 
public class FeedbackMessage { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private Integer Id; 

    @Column(name = "documentid") 
    private String documentid; 

    @Column(name = "status") 
    private String status; 

    @Column(name = "returndate") 
    private Date returndate; 

    @Column(name = "action") 
    private String action; 

    @Column(name = "actiondate") 
    private String actiondate; 


     Other fields... 
/***************************************/ 
    Setters en Getters method 
    //****// 
} 

TABLのステートメントの作成MYSQL

CREATE TABLE `sentmessages` (
    `documentid` varchar(45) DEFAULT '', 
    `language` varchar(30) DEFAULT NULL, 
    `sending_date` date DEFAULT NULL, 
    `customtext07` varchar(45) DEFAULT NULL, 
    `customtext12` varchar(45) DEFAULT NULL, 
    `customerid` varchar(45) DEFAULT NULL, 
    `email` varchar(100) DEFAULT NULL, 
    `documenttitle` varchar(45) DEFAULT NULL, 
    `count` int(11) DEFAULT NULL, 
    PRIMARY KEY (`documentid`) 
) ENGINE=InnoDB; 



CREATE TABLE `feedbackmessages` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `documentid` varchar(45) DEFAULT NULL, 
    `status` varchar(45) DEFAULT NULL, 
    `endcustomerid` varchar(45) DEFAULT NULL, 
    `reason` varchar(45) DEFAULT NULL, 
    `actiondate` date DEFAULT NULL, 
    `email` varchar(45) DEFAULT NULL, 
    `batchid` varchar(150) DEFAULT NULL, 
    `filename` varchar(45) DEFAULT NULL, 
    `channel` varchar(45) DEFAULT NULL, 
    `islegal` varchar(45) DEFAULT NULL, 
    `action` varchar(45) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    INDEX `FK_ID` (`document_id`), 
    CONSTRAINT `FK_DOCID` FOREIGN KEY (`document_id`) REFERENCES `sentmessages` (`documentid`) 

) ENGINE=InnoDB; 

答えて

1

で電子は、私はあなたが親(sentmessage)/子供(feedbackmessages)の関係マッピングをしたいと考えていますか?その場合、マッピングはこの(子クラス内)のようなものです:

@ManyToOne 
    @JoinColumn(name="documentid", 
    referencedColumnName = "documentid" 
    private SentMessage sentMessage; 

この記事は、一般的にHibernateのエンティティのマッピングであなたを助けるかもしれない:お時間を愛するhttp://www.objectdb.com/java/jpa/entity

+0

おかげで、私はあなたのように私を送ったものを読みましたリンク。私は今これを設計する方法を理解しています – algorithmic

関連する問題