Hibernate逆向工程 - 多对多关系

时间:2015-09-28 09:25:59

标签: java mysql many-to-many reverse-engineering hibernate-tools

我正在使用Jboss hibernate工具插件与Eclipse Kepler和JDK 6来反向设计来自Mysql好老sakila db的带注释的POJO文件。

hibernate代码生成配置设置为生成EJB3注释。以下是数据库图表的片段:

enter image description here

它有一个表film_actor,用于支持表格电影和演员之间的多对多关系。

当我从表格电影,演员&中反向设计POJO时film_actor 一起,我得到:

Film.java

@Entity
@Table(name = "film", catalog = "sakila")
public class Film implements java.io.Serializable {

    private Short filmId;
    private String title;
    private String description;
    private Date releaseYear;
    private byte languageId;
    private Byte originalLanguageId;
    private byte rentalDuration;
    private BigDecimal rentalRate;
    private Short length;
    private BigDecimal replacementCost;
    private String rating;
    private String specialFeatures;
    private Date lastUpdate;
    private Set filmActors = new HashSet(0);

Actor.java

@Entity
@Table(name = "actor", catalog = "sakila")
public class Actor implements java.io.Serializable {

    private Short actorId;
    private String firstName;
    private String lastName;
    private Date lastUpdate;
    private Integer age;
    private Set filmActors = new HashSet(0);

FilmActor.java

@Entity
@Table(name = "film_actor", catalog = "sakila")
public class FilmActor implements java.io.Serializable {

    private FilmActorId id;
    private Actor actor;
    private Film film;
    private Date lastUpdate;

FilmActorId.java

@Embeddable
public class FilmActorId implements java.io.Serializable {

    private short actorId;
    private short filmId;

到目前为止,太好了。但是如果我已经为演员和演员生成了POJO电影和我反向工程表film_actor,我得到以下课程:

@Entity
@Table(name = "film_actor", catalog = "sakila")
public class FilmActor implements java.io.Serializable {

    private FilmActorId id;
    private Date lastUpdate;

注意Actor&的引用如何如果在此课程中,电影将丢失,而不是之前的FilmActor.java。只有当我为所有三个表一起重新生成POJO时,才能得到Actor& amp;电影在FilmActor.java。

我对hibernate很新,所以我需要一些澄清:

1)我们是否真的需要Actor& amp; FilmActor.java中的电影?使用外键引用它所引用的类是标准做法吗?

2)为什么FilmActor.java中缺少引用,如果我已经拥有了Actor.Java& Film.Java可以在同一个包中找到?是否有相同的配置设置?

1 个答案:

答案 0 :(得分:0)

如果要创建与已经反向工程的实体有关系的新表,则需要选择新表和旧表来进行正确的逆向工程。

我还遇到了 工具无法为创建注释的问题。事实证明这是一个案例问题。所有表名()都是大写的,一旦我切换到小写,所有实体都是正确生成的。