简体   繁体   English

为什么我在定义时收到 IdClass 未定义错误?

[英]Why am I receiving an IdClass not defined error when it is defined?

I have two classes, a User and a LocalUser.我有两个类,一个用户和一个本地用户。 LocalUser uses a FK to User as it's PK. LocalUser 对用户使用 FK 作为 PK。 When I try to create a LocalUserRepository, I receive the exception: java.lang.IllegalArgumentException: This class [~.LocalUser] does not define an IdClass.当我尝试创建 LocalUserRepository 时,收到异常:java.lang.IllegalArgumentException:此 class [~.LocalUser] 未定义 IdClass。

I have been searching for an answer for a few hours and everything I have tried has not worked.我已经寻找了几个小时的答案,但我尝试过的一切都没有奏效。

@Entity( name = "User" )
@Table( name = "users" )
public class User implements Serializable
{
    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY, generator = "user_id_seq" )
    @Column( name = "id", updatable = false, columnDefinition = "BIGSERIAL" )
    private Long id;
    @Column( name = "given_name", nullable = false )
    private String givenName;
    @Column( name = "family_name" )
    private String familyName;
    @Enumerated( EnumType.STRING )
    @Column( name = "role", nullable = false, columnDefinition = "VARCHAR(32)" )
    private Role role;

    ...
}

@Entity( name = "LocalUser" )
@Table( name = "local_user" )
@IdClass( User.class )
public class LocalUser implements Serializable
{
    @Id
    @OneToOne( optional = false, orphanRemoval = true )
    @JoinColumn( name = "user_id", nullable = false, unique = true )
    private User user;
    @Column( name = "username", unique = true, nullable = false )
    private String username;
    @Column( name = "password", nullable = false )
    private String password;

    ...
}

public interface LocalUserRepo extends JpaRepository<LocalUser, User>
{
    @Query( "SELECT u.user FROM LocalUser u WHERE u.username = :username AND u.password = :password" )
    User getUser( String username, String password );
}

The desired result is two tables with matching this schema:期望的结果是与此模式匹配的两个表:

user用户

id [PK]身份证 [PK] given_name给定的名称 family_name role角色
1 1 Example例子 User用户 User用户

local_user本地用户

user_id [PK,FK(user)] user_id [PK,FK(用户)] username用户名 password密码
1 1 exampleuser示例用户 ######## ########

After much searching, I finally managed to accomplish what I was attempting.经过多次搜索,我终于设法完成了我正在尝试的事情。 I needed to add an id to LocalUser and map it to a user.我需要向 LocalUser 添加一个 ID,并将 map 添加给用户。 Here is what I did:这是我所做的:

@Entity
@Table( name = "local_users" )
public class LocalUser
{
    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY )
    @Column( name = "user_id", nullable = false )
    private Long id;

    @MapsId
    @OneToOne( fetch = FetchType.EAGER, optional = false )
    @JoinColumn( name = "user_id", nullable = false, foreignKey = @ForeignKey( name = "local_users_user_id_fk" ) )
    private User user;

    @Column( name = "password", nullable = false )
    private String password;

    @Column( name = "username", nullable = false, unique = true )
    private String username;
}

@Entity
@Table( name = "users" )
public class User
{
    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY, generator = "user_id_seq" )
    @Column( name = "id", updatable = false, columnDefinition = "BIGSERIAL" )
    private Long id;
    @Column( name = "given_name", nullable = false )
    private String givenName;
    @Column( name = "family_name" )
    private String familyName;
    @Enumerated( EnumType.STRING )
    @Column( name = "role", nullable = false, columnDefinition = "VARCHAR(32)" )
    private Role role;

    ...

}

@Repository
public interface LocalUserRepo extends JpaRepository<LocalUser, Long>
{
    @Query( "SELECT u.user FROM LocalUser u WHERE u.username = :username AND u.password = :password" )
    User getUser( String username, String password );
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 为什么会出现“包装未命名的包装中已定义”错误? - Why am I getting a “Is already defined in package unnamed package” error? 为什么会出现“ xxx已经定义”的编译器错误? - Why am I getting an “xxx is already defined” compiler error? 为什么在尝试将 Button 添加到 GridPane 时会收到错误消息? - Why am I receiving an error when trying to add a Button to a GridPane? 在另一个.java文件中定义语句后,为什么会出现“找不到符号”错误? - Why am I getting “Cannot find symbol” error when I already defined the statements in another.java file? 为什么我会收到堆栈溢出错误? - Why am I receiving a Stack overflow error? 为什么我收到此sql错误? - Why I am receiving this sql error? 对于继承的@OneToOne @Id,JpaRepository中的“IdClass未定义” - ~“IdClass not defined” in JpaRepository, for an inherited @OneToOne @Id 当我已经定义了bean时,为什么会出现NoSuchBeanDefinitionException? - Why am I getting a NoSuchBeanDefinitionException when I have already defined the bean? 为什么在类中定义数组大小时会出现ArrayIndexOutOfBounds异常? - Why am I getting an ArrayIndexOutOfBounds exception when array size defined in class? 当我尝试将新列表 object 添加到预定义列表 object 时出现错误 - Getting error when I am trying to add a new List object to a pre-defined List object
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM