Java 映射Hibernate注释一对多关系的优化方法

Java 映射Hibernate注释一对多关系的优化方法,java,mysql,spring,hibernate,java-8,Java,Mysql,Spring,Hibernate,Java 8,我正在开发一个SpringMVCWeb应用程序,我很难在实体类中应用Hibernate的“良好”映射设计,并使用适当的注释。我想就用Java表示数据库表的最佳设计提供一些建议 了解我的处境: 此ORM映射的目标将用于在SentMessage表中持久化现有未经处理的xml文件。在FeedBackMessage表中,我将保存解析为Java对象的现有CSV文件(反馈) 基于此“批处理过程”,我必须进行比较,以了解哪个documentid根据在数据库级别收到的反馈收到了可能数量的状态(status) 我

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

了解我的处境: 此ORM映射的目标将用于在SentMessage表中持久化现有未经处理的xml文件。在FeedBackMessage表中,我将保存解析为Java对象的现有CSV文件(反馈)

基于此“批处理过程”,我必须进行比较,以了解哪个documentid根据在数据库级别收到的反馈收到了可能数量的状态(status)

我尝试过以下设计,但在尝试将数据插入数据库时出现“分离实体错误”:

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
    //****//
}
反馈消息实体

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

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


这篇文章可能会帮助您进行Hibernate实体映射:

感谢您抽出时间阅读您作为链接发送给我的内容。我现在知道如何设计这个了