如何使用 jpa/hibernate 注释映射来设置<Entity>和实体是复合主键


@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "users")
@ToString
@Table(name = "users")
@Embeddable
public class User implements UserDetails{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id",unique=true)
    private Long id;
    @OneToMany
    @Cascade({CascadeType.ALL })
    @JoinTable(name = "users_authorities")
    private Set<SimpleGrantedAuthority> authorities;
}

这是我的User.java,有一个private Set<SimpleGrantedAuthority> authorities。我想使用 jpa/hibernate 映射到另一个实体SimpleGrantedAuthority

@Data
@Entity(name = "authorities")
@Embeddable
@Table(name = "authorities", uniqueConstraints={@UniqueConstraint(columnNames={"authority","username"})})
class SimpleGrantedAuthority implements GrantedAuthority {
    private Long id;
    @Column(name = "authority")
    private String authority;
    @Column(name = "username")
    private String username;
}

SimpleGrantedAuthority .java,如何编写正确的注解来映射Set<SimpleGrantedAuthority> authorities; SimpleGrantedAuthority.java上面的private Set<SimpleGrantedAuthority> authorities;

Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.as.backend.antscience.entity.SimpleGrantedAuthority

如果你在 JPA 中需要一个快速组合键,你必须写如下。首先,将组合键定义为类并放置一个@Embeddable注释。并将该 Id 类定义为 entitiy 类的成员并放入@EmbeddedId

@Data
@Entity(name = "authorities")
@Embeddable
@Table(name = "authorities", uniqueConstraints={@UniqueConstraint(columnNames={"authority","username"})})
class SimpleGrantedAuthority implements GrantedAuthority {
    @EmbeddedId
    private Id id;
    @Embeddable
    @EqualsAndHashCode
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    public static class Id implements Serializable {
        private static final long serialVersionUID = 1L;
        @Column(name = "authority")
        private String authority;
        @Column(name = "username")
        private String username;
    }
}

@JoinColumns注释可能是您要查找的。

https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/JoinColumns.html

最新更新