簡體   English   中英

為什么我在定義時收到 IdClass 未定義錯誤?

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

我有兩個類,一個用戶和一個本地用戶。 LocalUser 對用戶使用 FK 作為 PK。 當我嘗試創建 LocalUserRepository 時,收到異常:java.lang.IllegalArgumentException:此 class [~.LocalUser] 未定義 IdClass。

我已經尋找了幾個小時的答案,但我嘗試過的一切都沒有奏效。

@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 );
}

期望的結果是與此模式匹配的兩個表:

用戶

身份證 [PK] 給定的名稱 角色
1 例子 用戶 用戶

本地用戶

user_id [PK,FK(用戶)] 用戶名 密碼
1 示例用戶 ########

經過多次搜索,我終於設法完成了我正在嘗試的事情。 我需要向 LocalUser 添加一個 ID,並將 map 添加給用戶。 這是我所做的:

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM