Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Hibernate4的反向工程工具不为实体类创建关系注释?_Java_Eclipse_Hibernate_Spring Mvc_Reverse Engineering - Fatal编程技术网

Java 为什么Hibernate4的反向工程工具不为实体类创建关系注释?

Java 为什么Hibernate4的反向工程工具不为实体类创建关系注释?,java,eclipse,hibernate,spring-mvc,reverse-engineering,Java,Eclipse,Hibernate,Spring Mvc,Reverse Engineering,我一直很难让Hibernate4从我的数据库模式中逆向工程实体类。我的数据库实际上是一个Derby数据库,但在阅读之后,我听说Derby可能在hibernate反向工程方面有问题,所以我决定使用MySQL数据库连接生成实体,但如果有意义的话,可以在Derby连接上使用生成的实体 我已经安装了带有JBoss Hibernate插件的SpringToolsSite。我转到数据库开发视角,创建了一个成功链接到MySQL的数据源。我可以从STS/Eclipse内部很好地浏览这些表。然后我转到Hibern

我一直很难让Hibernate4从我的数据库模式中逆向工程实体类。我的数据库实际上是一个Derby数据库,但在阅读之后,我听说Derby可能在hibernate反向工程方面有问题,所以我决定使用MySQL数据库连接生成实体,但如果有意义的话,可以在Derby连接上使用生成的实体

我已经安装了带有JBoss Hibernate插件的SpringToolsSite。我转到数据库开发视角,创建了一个成功链接到MySQL的数据源。我可以从STS/Eclipse内部很好地浏览这些表。然后我转到Hibernate透视图并设置控制台配置。同样,这似乎是成功的,从Hibernate的角度来看,我可以浏览表并查看数据库表的列定义。然后我转到Hibernate代码生成配置对话框来创建一个新的配置。我从JDBC连接中检查反向工程,并检查启用的所有4个选项。我不能包括图片,因为我的声誉太低,目前,所以很抱歉,如果这不是完全清楚

反向工程确实可以处理这些设置,并为我完成了很多任务,但一个主要问题是,正在创建的实体没有正确注释外键。例如,如果我有Foo,并且Foo的一列是Bar的外键,我希望在Foo的entity类中看到类似的内容:

...
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "barid", nullable = false, referencedColumnName="id")
@ForeignKey(name="FK_BarID")
private Bar bar;
...
但我得到的却没那么有用:

...
@Column(name = "barid")
@NotNull
private Integer barid;
...
现在,我决定看看是否可以让Hibernate4的反向工程特性使用比我实际尝试使用的模式更小的模式。最好是有人报告说正在工作的人。在谷歌搜索之后,我发现有人的问题与我遇到的问题完全相同,尽管他的解决方案不适用于我的案例在线模式示例:

我不得不稍微改变他的模式,因为我的MySQL版本中的InnoBD引擎不喜欢外键仅为int,而它们引用的主键是bigint。因此,我使用以下模式:

create table folder (
    id bigint not null auto_increment,
    title varchar(100) not null,
    primary key (id) 
) ENGINE=InnoDB;

create table language (
    id bigint not null auto_increment,
    name varchar(30),
    code varchar(3),
    primary key (id) 
) ENGINE=InnoDB;

create table document (
    id bigint not null auto_increment,
    folderId bigint not null,
    title varchar(100) not null,
    primary key (id),
    FOREIGN KEY (folderId) REFERENCES folder(id)
) ENGINE=InnoDB;

create table page (
    id bigint not null auto_increment,
    version int not null default 1,
    documentId bigint not null,
    languageId bigint not null default 1,
    fileName varchar(100),
    primary key (id),
    FOREIGN KEY (documentId) REFERENCES document(id),
    FOREIGN KEY (languageId) REFERENCES language(id)
) ENGINE=InnoDB;
我已经检查并验证了InnoDB是活动的,并且正在使用SHOW TABLE STATUS,其中NAME='TableName';但这并不能解决链接所暗示的问题。我想我可以让我的模式正常工作,如果我至少可以让这个基本模式做我想做的,但是经过几个小时的尝试,我似乎无法让它识别任何模式的外键。有没有我错过的一步?谢谢