4

私は4つのエンティティ1対多のメッセージエンティティを持っています:

@Entity
@Table(name = "Messages")
public class Message {
...
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "messagesounds_id")
    private Sound sound;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "messagevibrations_id")
    private Vibration vibration;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "messagecolors_id")
    private Color color;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "messageplatforms_id")
    private Platform platform;
...
}

一方、他の 4 つのエンティティは次のようになります。

@Entity
@Table( name = "MessageSounds"  , uniqueConstraints=@UniqueConstraint(columnNames = {"name"}))
public class Sound {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    @OneToMany(cascade={CascadeType.ALL})
    @JoinColumn(name="messagesounds_id")
    private Set<Message> message;
...
}

4 つの参照テーブルの最初のレコードを参照する最初のメッセージ レコードを正常に作成できます。しかし、postgresql db のメッセージ テーブルは次のようになります。

 id |...| messagesounds_id | messagevibrations_id | messagecolors_id | messageplatforms_id |
 1  |...| 2 | 3 | 4 | 5 |

メッセージテーブルの最初のレコードが次のようになるように、4 つの参照テーブルのすべての主キーを自動インクリメントしたいと考えています。

 id |...| messagesounds_id | messagevibrations_id | messagecolors_id | messageplatforms_id |
 1  |...| 1 | 1 | 1 | 1 |

注釈を使用してこれを達成する方法は?

4

2 に答える 2

4

OK、Hibernate からPostgreSQL シーケンスを使用しても、 a_horse_with_no_namelessによって引用されるシーケンス テーブルには影響しません

次のように、参照されるすべてのテーブルの自動インクリメントされた主キーを設定することができました。

@Id
@SequenceGenerator(name="pk_sequence",sequenceName="messagesounds_id_seq", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pk_sequence")
private int id;

すべての研究に感謝します。

于 2013-06-10T10:12:32.697 に答える
-2

@Id @GeneratedValue(strategy=GenerationType.AUTO) プライベート int id; 永続化するときは null (0) のままにします。(Integer / Long ラッパーを使用する場合は null)

場合によっては、AUTO 戦略が IDENTITY や TABLE ではなく SEQUENCE に解決されるため、IDENTITY または TABLE に手動で設定することをお勧めします (基礎となるデータベースによって異なります)。

SEQUENCE + シーケンス名の指定がうまくいったようです。

于 2013-06-10T09:28:29.310 に答える