2017-03-21 57 views
0

我正在研究Spring MVC WEB應用程序,我很難在適當的註釋中在我的Entity類中應用Hibernate的「良好」映射設計。我想就什麼是用Java表示我的數據庫表的最佳設計提供一些建議。映射Hibernate批註的優化方式一對多關係

爲了解我的情況: 這個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創建聲明E在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