2014-12-02 50 views
0

实体正确的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

回答

1

尝试删除@basic注释也可以使用 “列表”,而不是 “收藏”

+1

去除@basic的伎俩。因为OneToMany关系在默认情况下被延迟加载,所以我应该使用'@OneToMany(mappedBy =“status”,fetch = FetchType.LAZY)'而不是'@OneToMany(mappedBy =“status”)'''。 – 2014-12-02 02:29:18