繁体   English   中英

如何使用 Hibernate 和 postgresql 为一对多关系实现每个表的自动递增 id 字段

[英]how to implement auto increment id field per table with Hibernate and postgresql for one to many relationships

我有 4 个实体一对多消息实体:

@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 |

如何使用注释来实现这一点?

好的,从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;

非常感谢所有的研究。

@Id @GeneratedValue(strategy=GenerationType.AUTO) private int id; 并且在坚持时将其保留为 null (0)。 (如果您使用 Integer / Long 包装器,则为 null)

在某些情况下,AUTO 策略被解析为 SEQUENCE 而不是 IDENTITY 或 TABLE,因此您可能需要手动将其设置为 IDENTITY 或 TABLE(取决于底层数据库)。

似乎 SEQUENCE + 指定序列名称对您有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM