60

一緒にいる時もあれば、一人でいる時もある…同じことをしているように見える時もある。

違いは何ですか?

以下に 3 つの例を示します。彼らは何をしますか?それらすべてに @GeneratedValue だけを使用できないのはなぜですか?

例 1

@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment") 
Long id;

例 2

@Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
private int userId;

例 3

@ElementCollection
@JoinTable(name="Address",
   joinColumns=@JoinColumn(name="user_id")
)
@GenericGenerator(name="hilo-gen", strategy="hilo")
@CollectionId(columns = @Column(name="Address_id"), generator = "hilo-gen", type = @Type(type="long"))
Collection<Addr> listOfAddresses = new ArrayList<Addr>();
4

3 に答える 3

17

@kevin-bowersoxの回答を拡張するには。
で指定されているように、Hibernate の主キー生成戦略と特定のジェネレーターのそれぞれの関係org.hibernate.id.IdentifierGeneratorFactory

static {
    GENERATORS.put("uuid", UUIDHexGenerator.class);     // "deprecated" for new use
    GENERATORS.put("hilo", TableHiLoGenerator.class);   // removed in Hibernate 5
    GENERATORS.put("assigned", Assigned.class);
    GENERATORS.put("identity", IdentityGenerator.class);
    GENERATORS.put("select", SelectGenerator.class);
    GENERATORS.put("sequence", SequenceGenerator.class);
    GENERATORS.put("seqhilo", SequenceHiLoGenerator.class);
    GENERATORS.put("increment", IncrementGenerator.class);
    GENERATORS.put("foreign", ForeignGenerator.class);
    GENERATORS.put("guid", GUIDGenerator.class);
    GENERATORS.put("uuid.hex", UUIDHexGenerator.class); // uuid.hex is deprecated
    GENERATORS.put("sequence-identity", SequenceIdentityGenerator.class);
}

Hibernate 4.3 ではorg.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory、さらに 3 つの戦略を持つクラスを見つけました。

    register("uuid2", UUIDGenerator.class);
    register("enhanced-sequence", SequenceStyleGenerator.class);
    register("enhanced-table", TableGenerator.class);

上記の 15 の戦略に加えてnative、Hibernate でデフォルトでサポートされている 16 の生成戦略です。

native:

@GeneratedValue(generator = "nativeGenerator")
@GenericGenerator(name = "nativeGenerator", strategy = "native")
于 2017-01-23T08:50:05.640 に答える