私の場合、記事とブロックの関係はOneToManyです。つまり、1つの記事に多数のブロックがあることを意味します。そして、私はBlockを管理するためにCascadeType.ALLを使用する記事で、ここにコードがあります。エンティティの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のインデックスを使用するのではなく、現在のブロックのpriorIdに前のブロックのIDを設定し、データベースに永続化しないことを決定します。以下のコードを参照してください。
@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を得ることができない!明らかにあなたが別の戦略を使用した場合、あなたは持続する前に "id"を持つことができます... –
なぜこれを行うとあなたのパフォーマンスが向上すると思いますか? –
@NeilStocktonその後、TableGeneratorを試しましたが、それでも動作しません。 – MarcuX