我正在使用JPA创建和访问数据库。我的数据库由两个表组成?这两个表具有@OneToMany
关系。但是,当我运行我的应用程序时,我得到了java.sql.SQLException
。
我已经进行了一些研究,但在线解决方案似乎都不适合我。第一种解决方案建议将@GeneratedValue(strategy=GenerationType.AUTO)
替换为@GeneratedValue(strategy=GenerationType.IDENTITY)
第二个解决方案包括在application.properties中包含spring.jpa.hibernate.use-new-id-generator-mappings=false
。
这些解决方案均无效。
Car.java
@Entity
public class Car {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
....
@ManyToOne(fetch = FetchType.LAZY )
@JoinColumn(name = "owner")
private Owner owner;
....
}
Owner.java
@Entity
public class Owner {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long ownerid;
....
@OneToMany(cascade =CascadeType.ALL, mappedBy="owner")
private List<Car> cars;
....
}
application.properties
logging.level.root=INFO
server.port=8080
spring.jpa.show-sql=true
spring.datasource.url=jdbc:mariadb://localhost:3306/cardb
spring.datasource.username=****
spring.datasource.password=*******
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.generate-dll=true
spring.jpa.hibernate.dll-auto=create-drop
这是我得到的Exception
:
java.sql.SQLException: Table 'cardb.owner' doesn't exist
编辑:我正在使用MariaDB,数据库的名称为cardb。因此,当我运行应用程序时,它应该创建cardb.car
,cardb.owner
和cardb.car_owner
顺便说一句,使用H2
时可以正确创建数据库。这是否意味着问题来自MariaDB?
答案 0 :(得分:0)
@JoinColumn(name =“ owner”) 应该 @JoinColumn(name =“ ownerid”)
答案 1 :(得分:0)
我认为您在实体类中缺少@Table
。
将汽车定义为
@Entity
@Table (name="car")
public class Car {
...
}
和
所有者如下,
@Entity
@Table (name = "owner")
public class Owner {
...
}