[英]Why am I getting a “Is already defined in package unnamed package” error?
[英]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.