Cra*_*tis 4 java sql hibernate h2
我们有一个User具有List<String>权限的模型类,如下所示:
@LazyCollection(LazyCollectionOption.FALSE)
@CollectionOfElements
@Column()
private List<String> permissions = Collections.emptyList();
Run Code Online (Sandbox Code Playgroud)
它生成了一个SQL表,其中包含如下条目:

我们最近升级到了Hibernate 4,并且由于@CollectionOfElements注释已从弃用变为完全删除,我们认为这是转移到的好时机@ElementCollection,如下所示:
@LazyCollection(LazyCollectionOption.FALSE)
@ElementCollection // << CHANGED
@Column()
private List<String> permissions = Collections.emptyList();
Run Code Online (Sandbox Code Playgroud)
但是,在启动时,我们无法使用我们的管理帐户登录.好奇,我们使用H2的JAR检查了数据库,发现该表已被更改:

我的问题:
@CollectionOfElements到新的DDL /架构更改的完整列表@ElementCollection?Collection类型都将受到这一更改的影响- Sets,Maps等我只是想确保我们不会留下任何数据的背后,还是想尽一切办法,我们的升级过程中.第一个问题:
我不知道.但JPA规范是免费提供的,并描述了默认的表和列名称.
第二个问题:
@ElementCollection
@CollectionTable(name = "USER_PERMISSIONS"
joinColumns = @JoinColumn(name = "USER_ID"))
@Column(name = "ELEMENT")
private List<String> permissions = Collections.emptyList();
Run Code Online (Sandbox Code Playgroud)
我个人总是指定表名和列名.它避免了这种惊喜,让我总能选择我想要的名字,并且是自我纪录的.而且我也更喜欢自己创建数据库模式和DDL.这可确保正确创建所有必需的索引,约束,注释等.
第三个问题:是的,收集的性质无关紧要.请参阅第二个问题的答案,以避免出现这些问题.
| 归档时间: |
|
| 查看次数: |
8672 次 |
| 最近记录: |