Java Hibernate逆向工程-多对多关系

Java Hibernate逆向工程-多对多关系,java,mysql,many-to-many,reverse-engineering,hibernate-tools,jboss,eclipse,one-to-many,Java,Mysql,Many To Many,Reverse Engineering,Hibernate Tools,Jboss,Eclipse,One To Many,我正在使用Jboss hibernate工具插件和EclipseKepler和JDK6对Mysql良好的旧sakila数据库中带注释的POJO文件进行反向工程 hibernate代码生成配置设置为生成EJB3注释。以下是数据库关系图的片段: 它有一个表film_actor,用于支持表film和actor之间的多对多关系 当我将POJO从电影、演员和电影演员的表格中进行反向工程时,我得到: Film.java @Entity @Table(name = "film", catalog = "sa

我正在使用Jboss hibernate工具插件和EclipseKepler和JDK6对Mysql良好的旧sakila数据库中带注释的POJO文件进行反向工程

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

它有一个表film_actor,用于支持表film和actor之间的多对多关系

当我将POJO从电影、演员和电影演员的表格中进行反向工程时,我得到:

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);
@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);
@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;
@Embeddable
public class FilmActorId implements java.io.Serializable {

    private short actorId;
    private short filmId;
Actor.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);
@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);
@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;
@Embeddable
public class FilmActorId implements java.io.Serializable {

    private short actorId;
    private short filmId;
FilmActor.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);
@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);
@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;
@Embeddable
public class FilmActorId implements java.io.Serializable {

    private short actorId;
    private short filmId;
FilmActorId.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);
@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);
@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;
@Embeddable
public class FilmActorId implements java.io.Serializable {

    private short actorId;
    private short filmId;
到目前为止,一切顺利。但是如果我已经为actor&film生成了POJO,并且我对table film_actor进行了反向工程,我会得到以下类:

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

    private FilmActorId id;
    private Date lastUpdate;
请注意,如果与前面的FilmActor.java相反,在这个类中,Actor&Film的引用是如何丢失的。只有同时为所有三个表重新生成POJO,才能在FilmActor.java中获得Actor&Film的引用

我对hibernate非常陌生,因此我需要一些澄清:

1) 我们真的需要FilmActor.java中的Actor&Film引用吗?使用外键引用所引用的类是否是一种标准做法


2) 如果我已经在同一个包中提供了Actor.java和Film.java,那么如果我分别对这个类进行反向工程,为什么FilmActor.java中缺少引用?是否有相同的配置设置?

如果要创建与已进行反向工程的实体有关系的新表,则需要选择新表和旧表以进行适当的反向工程


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

如果从表生成实体,则只考虑正在选择的表。未选择的表的依赖项不被考虑,因此它们不在生成的类中。在执行反向工程之前,请确保film_actor表的两列都设置为主键。