2016-03-03 52 views
1

@JoinTable是否真的在数据库中创建并保存了一个名为“students_courses”的表?或者它只在运行时暂时存在,并在应用程序关闭后消失?@JoinTable是否在数据库中创建一个持久表?

@ManyToMany 
@JoinTable(
    name="students_courses", 
    [email protected](name="student_id", referencedColumnName="id"), 
    [email protected](name="course_id", referencedColumnName="id")) 
private List<Course> courses; 
+0

我需要手动创建这个“students_courses”表,或Hibernate会创建它时自动@JoinTable注解用的? – user697911

回答

0

在你persistence.xml你必须设置属性hbm2ddl.auto = create。 (更多信息在这里Hibernate hbm2ddl.auto possible values and what they do?

但是要注意这个属性。如果您设置值"create-drop",它将每次从您的实体重新创建数据库。

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> 

<persistence-unit name="NewPersistenceUnit"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties> 
     <!-- ... other properties ... --> 
     <property name="hbm2ddl.auto" value="create"/> 
     <!-- ... other properties ... --> 
    </properties> 
</persistence-unit> 

还可以看到这个好问题Hibernate: Automatically creating/updating the db tables based on entity classes

1

表必须存在于数据库中,它不是临时的。如果你配置了Hibernate,Hibernate会为你创建它,否则你需要在代码生效之前以其他方式创建它。

+0

“如果你已经配置了Hibernate,Hibernate会为你创建它”,如何配置Hibernate来这样做? – user697911