Hibernate @ElementCollection的序列生成器和代理项ID列
我想简化当前的实体模型,用于存储用户的旧密码*以防止重用 为了简单起见,我省略了大多数注释属性Hibernate @ElementCollection的序列生成器和代理项ID列,hibernate,jpa,Hibernate,Jpa,我想简化当前的实体模型,用于存储用户的旧密码*以防止重用 为了简单起见,我省略了大多数注释属性 @Entity @Table public class User { @Id @Column private String id; .... @OneToMany @OrderBy("id desc") private List<OldPassword> oldPasswords; } @Entity @Table @Seq
@Entity
@Table
public class User {
@Id
@Column
private String id;
....
@OneToMany
@OrderBy("id desc")
private List<OldPassword> oldPasswords;
}
@Entity
@Table
@SequenceGenerator
public class OldPassword {
@Id
@GeneratedValue
@Column
private Long id;
@ManyToOne
private User user;
@Column
private String oldPassword;
}
但是当我创建模式时,我在Oracle中得到了hibernate\u序列
,主键由USER\u ID
和OLD\u PASSWORD\u ID
生成
我必须(针对向后兼容性问题)获得旧密码\u ID
作为唯一主键和正确的Oracle序列
在JPA中,我如何定义一个@ElementCollection
,它有自己的代理、自动递增的主键,也用于对列表进行总排序?回想一下,如果集合上没有@OrderBy
或@OrderColumn
注释,就不能使用列表,否则Hibernate不知道如何对元素排序。在没有顺序列的情况下,必须使用无序的集合
*在有人评论之前的安全注意事项是:我存储加密的密码 ElementCollection没有自己的代理项id。它使用所属对象的id。O-OAn ElementCollection的所有部分都没有自己的代理项id。它使用拥有对象的id。O-O的所有部分
@JsonIgnore
@ElementCollection(fetch = FetchType.LAZY,
targetClass = String.class)
@SequenceGenerator(name = "SEQ_STORE",
sequenceName = "SEQ_OLD_PASSWORDS")
@GeneratedValue(strategy = GenerationType.AUTO,
generator = "SEQ_STORE")
@CollectionTable(name = "XTB_OLD_PASSWORDS",
joinColumns = @JoinColumn(name = "USER_ID",
nullable = false) ,
foreignKey = @ForeignKey(name = "FK_XTB_OLDPWD_2_USR") )
@Column(name = "PASSWORD",
nullable = false,
length = 100)
@OrderBy("OLD_PASSWORD_ID desc")
@OrderColumn(name = "OLD_PASSWORD_ID",
nullable = false)
private final List<String> oldPasswords = new ArrayList<>();