【问题标题】:Optimized way for mapping Hibernate annotations One to Many Relationship映射 Hibernate 注释一对多关系的优化方式
【发布时间】:2017-03-21 13:11:30
【问题描述】:

我正在开发一个 Spring MVC WEB 应用程序,我很难在我的实体类中使用 Hibernate 应用一个“好的”映射设计,并带有适当的注释。我想对用 Java 表示我的数据库表的最佳设计有一些建议。

了解我的情况: 此 ORM 映射的目标将用于将现有的未编组 xml 文件持久保存在 SentMessage 表中。在 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
    //****//
}

反馈消息实体

@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
    //****//
}

在 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;

【问题讨论】:

    标签: java mysql spring hibernate java-8


    【解决方案1】:

    我相信你想要一个父(sentmessage)/子(feedbackmessages)关系映射?如果是这样,映射是这样的(在子类中):

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

    这篇文章可能会对您一般的 Hibernate 实体映射有所帮助:http://www.objectdb.com/java/jpa/entity

    【讨论】:

    • 感谢您抽出宝贵时间阅读您作为链接发送给我的内容。我现在知道如何设计这个
    猜你喜欢
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多