Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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 JPA/Hibernate-带外键的复合主键_Java_Spring_Hibernate_Jpa_Spring Boot - Fatal编程技术网

Java JPA/Hibernate-带外键的复合主键

Java JPA/Hibernate-带外键的复合主键,java,spring,hibernate,jpa,spring-boot,Java,Spring,Hibernate,Jpa,Spring Boot,我正在尝试使用JPA和Hibernate开发一个Spring引导应用程序,我有以下两个表: CREATE TABLE IF NOT EXISTS `library`.`User` ( `id` VARCHAR(30) NOT NULL COMMENT 'The username', `name` VARCHAR(50) NULL, `surname` VARCHAR(50) NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB; CREATE TA

我正在尝试使用JPA和Hibernate开发一个Spring引导应用程序,我有以下两个表:

CREATE TABLE IF NOT EXISTS `library`.`User` (
  `id` VARCHAR(30) NOT NULL COMMENT 'The username',
  `name` VARCHAR(50) NULL,
  `surname` VARCHAR(50) NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `library`.`Library` (
  `userId` VARCHAR(30) NOT NULL,
  `id` CHAR(36) NOT NULL COMMENT 'An autogenerated UUID',
  `name` VARCHAR(50) NULL,
  PRIMARY KEY (`id`, `userId`),
  INDEX `USER_idx` (`userId` ASC),
  CONSTRAINT `USER`
    FOREIGN KEY (`userId`)
    REFERENCES `library`.`User` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;
这两个表的映射如下: 我用龙目来避免无聊的东西。 用户:

库的复合Id:

@RequiredArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@EqualsAndHashCode
public class LibraryId implements Serializable
{
   @NonNull
   public String userId;

   @NonNull
   public String id;
}
我这里什么都读 当通过Spring存储库执行查询时,still Spring/Hibernate返回此错误
findAll()
方法

SQL Error: 1054, SQLState: 42S22
Unknown column 'libraries0_.user_id' in 'field list'
怎么了?我失去了一天,但我还是不明白

根据请求,以下是两个存储库:

@Repository
public interface UserRepository extends JpaRepository<User, String>
{
   //
}

@Repository
public interface LibraryRepository extends JpaRepository<Library, LibraryId>
{
   //
}
似乎Hibernate没有加入

根据要求,这是Maven POM:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <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-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

org.springframework.boot
spring启动程序父级
1.5.6.1发布
UTF-8
UTF-8
1.8
org.springframework.boot
spring引导启动器数据jpa
org.springframework.boot
SpringBootStarterWeb
mysql
mysql连接器java
运行时
org.projectlombok
龙目
真的
org.springframework.boot
弹簧起动试验
测试
org.springframework.boot
springbootmaven插件

啊,旅程终于结束了。。。
问题在于转换实体列名时的Hibernate命名策略

使用:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
解决了这个问题。但是
我不明白为什么不能识别
@JoinColumn(name=“userId”)

请显示您正在使用的查询,或者JPA repository Class.hibernate有specyfic列替换,这很难理解。打开SQL日志,名称将处于完整的上下文中添加这两个存储库,但它们不是问题。@GuillaumeF。更新了问题;)@谢尔盖布朗诺夫发帖了!
select user0_.id as id1_1_, user0_.name as name2_1_, user0_.surname as surname3_1_ from user user0_

select libraries0_.user_id as user_id2_0_0_, libraries0_.id as id1_0_0_, libraries0_.id as id1_0_1_, libraries0_.user_id as user_id2_0_1_, libraries0_.name as name3_0_1_ from library libraries0_ where libraries0_.user_id=?
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <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-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl