问题创建使用的EclipseLink
问题描述:
实体正确的DDL我有两个实体的人&状态与多对一关系问题创建使用的EclipseLink
@Entity
@Table(name = "PERSON")
public class Person implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
@JoinColumn(name = "STATUS_ID", referencedColumnName = "ID")
@ManyToOne(cascade = CascadeType.ALL)
private Status status;
// setters & getters
}
和
@Entity
@Table(name = "STATUS")
public class Status implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Integer id;
@Column(name = "ABBREVIATION")
private String abbreviation;
@Column(name = "TITLE")
private String title;
@Basic(fetch=FetchType.LAZY)
@OneToMany(mappedBy = "status")
private Collection<Person> personCollection;
// setters & getters
}
当我尝试自动生成,这些实体的我得到的数据库表以下DDL:
CREATE TABLE `person` (
`ID` INT(11) NOT NULL AUTO_INCREMENT,
`FIRST_NAME` VARCHAR(255) NULL DEFAULT NULL,
`LAST_NAME` VARCHAR(255) NULL DEFAULT NULL,
`NICK_NAME` VARCHAR(255) NULL DEFAULT NULL,
`STATUS_ID` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`ID`),
INDEX `FK_PERSON_STATUS_ID` (`STATUS_ID`),
CONSTRAINT `FK_PERSON_STATUS_ID` FOREIGN KEY (`STATUS_ID`) REFERENCES `status` (`ID`)
)
CREATE TABLE `status` (
`ID` INT(11) NOT NULL AUTO_INCREMENT,
`ABBREVIATION` VARCHAR(255) NULL DEFAULT NULL,
`PERSONCOLLECTION` LONGBLOB NULL,
`TITLE` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`ID`)
)
显然有些问题,因为我的status
表中不需要有PERSONCOLLECTION LONGBLOB
字段。 我是否在做错了映射?
使用:Netbeans的8,的EclipseLink,JPA 2.1和MySQL 5.6
答
尝试删除@basic注释也可以使用 “列表”,而不是 “收藏”
去除@basic的伎俩。因为OneToMany关系在默认情况下被延迟加载,所以我应该使用'@OneToMany(mappedBy =“status”,fetch = FetchType.LAZY)'而不是'@OneToMany(mappedBy =“status”)'''。 – 2014-12-02 02:29:18