mysql jpa 不要自动建表_关于JPA(hibernate)实体bean不能自动建表的问题。希望前辈指导....

在尝试使用JPA进行数据库操作时遇到问题,实体bean Student和Course无法自动创建对应的数据库表。尽管关系表'Student_Course'已生成,但'Student'和'Course'表未创建。错误提示表'student'不存在,而JPA理论上应能自动建表。问题补充中提到期望了解JPA为何未能自动建表,以及是否需要对数据库进行特定配置。
摘要由CSDN通过智能技术生成

数据库连接应该是没有问题的。

persistence.xml文件:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/persistence

http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">

实体bean(Student):

package lun.beans;

import java.util.HashSet;

import java.util.Set;

import javax.persistence.CascadeType;

import javax.persistence.Entity;

import javax.persistence.FetchType;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.JoinTable;

import javax.persistence.ManyToMany;

@Entity

public class Student {

private String studentID;

private String studentName;

private String studentPassWord;

private String studentConnection;

private String studentGender;

private Set courses = new HashSet();

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

public String getStudentID() {

return studentID;

}

public void setStudentID(String studentID) {

this.studentID = studentID;

}

public String getStudentName() {

return studentName;

}

public void setStudentName(String studentName) {

this.studentName = studentName;

}

public String getStudentPassWord() {

return studentPassWord;

}

public void setStudentPassWord(String studentPassWord) {

this.studentPassWord = studentPassWord;

}

public String getStudentConnection() {

return studentConnection;

}

public void setStudentConnection(String studentConnection) {

this.studentConnection = studentConnection;

}

public String getStudentGender() {

return studentGender;

}

public void setStudentGender(String studentGender) {

this.studentGender = studentGender;

}

@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)

@JoinTable(name = "Student_Course",

joinColumns = {@JoinColumn(name = "studentID", referencedColumnName = "studentID")},

inverseJoinColumns = {@JoinColumn(name = "courseID", referencedColumnName = "courseID")})

public Set getCourses() {

return courses;

}

public void setCourses(Set courses) {

this.courses = courses;

}

public Student() {

}

}

实体bean(Course):

package lun.beans;

import java.util.HashSet;

import java.util.Set;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.ManyToMany;

@Entity

public class Course {

private String courseID;

private String courseName;

private String courseTeacherID;

private String courseTeacherName;

private String courseDescription;

private String courseState;//打开状态 = 1,关闭状态 = 2;

private Set students = new HashSet();

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

public String getCourseID() {

return courseID;

}

public void setCourseID(String courseID) {

this.courseID = courseID;

}

public String getCourseName() {

return courseName;

}

public void setCourseName(String courseName) {

this.courseName = courseName;

}

public String getCourseTeacherID() {

return courseTeacherID;

}

public void setCourseTeacherID(String courseTeacherID) {

this.courseTeacherID = courseTeacherID;

}

public String getCourseTeacherName() {

return courseTeacherName;

}

public void setCourseTeacherName(String courseTeacherName) {

this.courseTeacherName = courseTeacherName;

}

public String getCourseDescription() {

return courseDescription;

}

public void setCourseDescription(String courseDescription) {

this.courseDescription = courseDescription;

}

public String getCourseState() {

return courseState;

}

public void setCourseState(String courseState) {

this.courseState = courseState;

}

@ManyToMany(mappedBy = "courses")

public Set getStudents() {

return students;

}

public void setStudents(Set students) {

this.students = students;

}

}

使用Junit4测试时:

@Test

public void testrun(){

EntityManager em = Persistence.createEntityManagerFactory("lun").createEntityManager();

EntityTransaction ctx = em.getTransaction();

ctx.begin();

Student s = new Student();

s.setStudentConnection("123");

s.setStudentGender("123");

s.setStudentName("123");

s.setStudentGender("1");

em.persist(s);

ctx.commit();

em.close();

}

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not insert: [lun.beans.Student]

at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)

at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:226)

at unit.test.testTest.testrun(testTest.java:29)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)

at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)

at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)

at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)

at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)

at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)

at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)

at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)

at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)

at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

Caused by: org.hibernate.exception.SQLGrammarException: could not insert: [lun.beans.Student]

at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)

at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)

at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)

at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)

at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)

at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)

at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)

at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)

at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:154)

at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:110)

at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)

at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:646)

at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:620)

at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:624)

at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)

... 21 more

Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'lunuse.student' doesn't exist

at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)

... 36 more

数据库里生成了student与course的关系表student_course 可是生成不了student 和course.这是为什么呢?

错误显示表不存在,可是JPA应该是可以自动建立表的?为什么它会说表不存在。

问题补充:

我用的是JPA,您回答的是hibernate。

而且我想知道,为什么要针对数据库调节呢?要调节的东西具体又有哪些?

谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值