就我而言,Article和Block的關係是OneToMany,這意味着在一篇文章中有很多Block。在文章中我使用CascadeType.ALL來管理Block,這裏是代碼。如何在持續之前獲取實體的ID?
@Entity
public class Article implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
...
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "ARTICLE_ID")
private List<Block> blocks;
...
}
我想記錄我的塊的順序,出於性能的原因,我決定不使用ArrayList的索引,但設置先前塊的ID在當前塊的priorId,然後堅持到數據庫中。請參閱下面的代碼。
@Entity
public class Block implements Serializable {
@Id
@TableGenerator(name = "BLOCK_ID_GEN",
table = "ENTITY_KEY",
pkColumnName = "ENTITY_NAME",
pkColumnValue = "BLOCK",
valueColumnName = "KEY_SEQUENCE",
allocationSize = 10)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "BLOCK_ID_GEN")
private Long id;
...
private Long priorId;
...
}
public class BlockUtil {
public static List<Block> setPriorId(List<Block> blocks) {
List<Block> resultBlocks = new ArrayList<>();
if (!blocks.isEmpty()) {
resultBlocks.add(blocks.get(0));
for (int i = 1; i < blocks.size(); i++) {
blocks.get(i).setPriorId(blocks.get(i - 1).getId());
resultBlocks.add(blocks.get(i));
}
}
return resultBlocks;
}
}
問題是我不知道塊的ID,除非我堅持他們到數據庫,所以如果我堅持我的做法,我該怎麼辦?或者我應該使用更好的方法?無論如何,我想要他們。非常感謝!
。所以你不能在堅持之前獲得ID!顯然,如果你使用了不同的策略,那麼你可以在持續之前擁有「id」... –
爲什麼你認爲這樣做會提高你的表現? –
@NeilStockton然後我嘗試了TableGenerator,但仍然無法正常工作.... – MarcuX