我正在开发一个 Spring MVC WEB 应用程序,我很难在我的实体类中使用 Hibernate 并使用正确的注释来应用“良好”的映射设计。我想就用 Java 表示数据库表的最佳设计获得一些建议。
为了了解我的情况: 此 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
//****//
}
反馈消息实体
@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)关系映射?如果是这样,映射如下(在子类中):
@ManyToOne
@JoinColumn(name="documentid",
referencedColumnName = "documentid"
private SentMessage sentMessage;
本文可能会帮助您处理一般的 Hibernate 实体映射:http://www.objectdb.com/java/jpa/entity
关于java - Hibernate注解一对多关系映射的优化方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42928177/