との複合主キー私はJPAやHibernateのを使って春のブートアプリケーションを開発しようとしている、と私は、次の2つのテーブルを持っている:JPA/Hibernateは - 外部キー
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;
これらの2つのテーブルmappesあります次のように: 私は退屈なものを避けるためにロンボクを使用します。 ユーザー:
@Entity
@Table(name = "user")
@NoArgsConstructor
@Getter
@Setter
public class User
{
@Id
@Column(name = "id")
private String id;
@Column(name = "name")
private String name;
@Column(name = "surname")
private String surname;
@OneToMany(mappedBy = "userId")
private Set<Library> libraries = new HashSet<>();
}
図書館:図書館のための
@Entity
@Table(name = "library")
@IdClass(LibraryId.class)
@NoArgsConstructor
@Getter
@Setter
public class Library
{
@Id
@ManyToOne
@JoinColumn(name = "userId", referencedColumnName = "id")
private User userId;
@Id
@Column(name = "id")
private String id;
@Column(name = "name")
private String name;
}
複合イド:私は、クエリを実行するとき は、まだ春/ Hibernateはこのエラーを返しますhttps://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencingここにすべてを読ん
@RequiredArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@EqualsAndHashCode
public class LibraryId implements Serializable
{
@NonNull
public String userId;
@NonNull
public String id;
}
Spring Repository findAll()
メソッドを使用します。
SQL Error: 1054, SQLState: 42S22
Unknown column 'libraries0_.user_id' in 'field list'
何が問題なのですか。私は1日を失ったが、まだ私は理解していない。
そして、ここでは...
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=?
が休止状態のように思える参加やっていません。
@Repository
public interface UserRepository extends JpaRepository<User, String>
{
//
}
@Repository
public interface LibraryRepository extends JpaRepository<Library, LibraryId>
{
//
}
そして、実際のクエリ:要求ごととして
、これらは2つのリポジトリです要求に応じて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>
使用しているクエリまたはJPAリポジトリクラスを表示してください。 –
hibernateには厳密な列の置換があり、わかりにくいです。 SQLログを有効にすると、名前はフルコンテキストになります –
2つのリポジトリを追加しましたが、問題はありません。 – LppEdd