有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate继承类型。连接阻止了表的创建

我有两个类,“OrderBase”和“OrderPay”,我正试图实现“InheritanceType.JOINED”类型的继承

虽然每个类的表和单个表都可以很好地工作,但一旦我将类型更改为“JOINED”就无法创建它,我也不知道为什么

我在切换继承类型时删除并重新创建了模式,以确保这不是问题所在

我试图实现该类型继承的任何其他类也会发生这种情况

我的表格创建策略是“创建”: 春天jpa。冬眠自动创建

将其更改为“update”时,即使该表存在于数据库中(抛出错误之前和之后),错误仍将持续存在

我还创建了一个新项目,以确保没有任何其他因素阻止它运行,并且仍然会发生相同的错误

我在github上分享了这个项目。在localhost上使用mysql创建模式的规范在应用程序中。属性文件: https://github.com/Danielmethner/brownbag

以下是课程:

  1. 订单库。爪哇
package com.brownbag_api.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

@Entity
@Table(name = "ORDER_BASE")
@Inheritance(strategy = InheritanceType.JOINED)
public class OrderBase implements Serializable {

    private static final long serialVersionUID = -3458221490393509305L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;

    @NotNull
    @Column(name = "AMOUNT")
    private double amount;

    public Order() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public double getAmount() {
        return amount;
    }

    public void setAmount(double amount) {
        this.amount = amount;
    }
}
  1. 订单支付。爪哇
package com.brownbag_api.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.validation.constraints.NotNull;

@Entity
public class OrderPay extends OrderBase  {

    private static final long serialVersionUID = 4643589803146964779L;

    @NotNull
    @Column(name = "BOOK_TEXT")
    private String bookText;

    public OrderPay() {
    }

    public String getBookText() {
        return bookText;
    }

    public void setBookText(String bookText) {
        this.bookText = bookText;
    }
}

堆栈跟踪如下(实际上归结为“未找到父类表”)

原因:javax。坚持不懈PersistenceException:[PersistenceUnit:default]无法生成Hibernate SessionFactory;嵌套的异常是org。冬眠MappingException:无法实例化持久化组织。冬眠坚持者。实体联合子类TyperMaster 原因:org。冬眠MappingException:无法实例化持久化组织。冬眠坚持者。实体联合子类TyperMaster 原因:org。冬眠断言失败:表brownbag。找不到订单库

波姆。xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.brownbag</groupId>
    <artifactId>api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>api</name>
    <description>API for brownbag project</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

共 (1) 个答案

  1. # 1 楼答案

    你打错了。可能您继承了javax。坚持不懈标准秩序

    如果您将OrderPay更改为从正确的OrderBase类扩展,则一切都将按预期工作,并创建表:

    public class OrderPay extends OrderBase {
    
        //rest of code
    
    }
    

    此外,请删除此属性:

    spring.jpa.properties.hibernate.default_schema=brownbag
    

    您已经在spring中定义了要连接的数据库。数据源。网址