我无法生成自动递增的ID,并且休眠始终生成1,因为ID
我对此有点不安,我只是为了了解正在发生的事情而寻求帮助。我无法生成自动递增的ID,并且休眠始终生成1,因为ID
所以,我有这个表(DDL):
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`firstname` varchar(45) NOT NULL,
`lastname` varchar(45) NOT NULL,
`email` varchar(60) NOT NULL,
`password` varchar(100) NOT NULL,
`enabled` tinyint(1) NOT NULL,
`created_at` datetime DEFAULT NULL,
`image_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email_UNIQUE` (`email`),
KEY `FK17herqt2to4hyl5q5r5ogbxk9` (`image_id`),
CONSTRAINT `FK17herqt2to4hyl5q5r5ogbxk9` FOREIGN KEY (`image_id`) REFERENCES `images` (`id`),
CONSTRAINT `fk_users_images1` FOREIGN KEY (`image_id`) REFERENCES `images` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
我的实体:
@Entity @Table(name = "users")
public class User implements Serializable {
private static final long serialVersionUID = 6304869652591140818L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@Column(name = "firstname")
private String firstname;
@Column(name = "lastname")
private String lastname;
@Column(name = "email")
private String email;
@Column(name = "password")
@Transient
private String password;
@Column(name = "enabled")
private int enabled;
@Column(name = "created_at")
private LocalDateTime createdAt;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "users_has_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
@MapsId
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Image image;
// Setters and Getters
}
我想坚持使用此代码新用户:
@PersistenceContext private EntityManager em;
@Transactional
public void createUser(NewUserDto newUser) {
User user = new User();
user.setFirstname(newUser.getFirstname());
user.setLastname(newUser.getLastname());
user.setEmail(newUser.getEmail());
user.setEnabled(ENABLED);
user.setPassword(bCryptPasswordEncoder.encode(newUser.getPassword()));
Image userImage = imageService.getImageById(1L);
user.setProfileImage(userImage);
Set<Role> roles = new HashSet<Role>();
Role role = roleRepository.findByName(newUser.getRole());
roles.add(role);
user.setRoles(roles);
if (user.getId() == null) {
em.persist(user);
em.flush();
} else {
em.merge(user);
}
}
问题是,当我调试时,我发现总是为新用户生成id = 1。
但在数据库中,我看到所有正确的。
当我搜索我碰到下面的所有用户:
public List<User> getAll() { return userRepository.findAll();
}
同样JPDA ObjectReference。
任何帮助将受到欢迎。
谢谢。
回答:
(道歉没有足够的信誉发表评论)
我并不清楚明白你的问题。无论如何,我会尽力根据我认为是你的问题来解释。
- 默认情况下,AUTO_INCREMENT的起始值为1,而 将为每个新记录增加1。所以预期这种行为。
- 如果您希望它的值不是1,那么您必须使用 GenerationType.SEQUENCE并进行适当的更改。
- 此搜索:你刚才提到,该值越来越进入 数据库正确,这表明ID值被 产生正确
- 镜像2:用户来说是一个Javascript数组。 javascript 数组的索引值始终从零开始。这只是索引值而不是 的id值。同样,右侧提到的ID是 javascript的内部对象ID,而不是用户的实际ID。
- 要查看该用户的真实身份,扩大用户的位置0
如果这不回答你的问题,请详细说明您的问题,究竟出了什么错误或问题。
回答:
的问题,从一个误解,其中Hibernate的回退为GenerationType.AUTO
是GenerationType.SEQUENCE
茎,而大多数人想的是GenerationType.IDENTITY
,这样你就可以利用数据库为您分配的ID。只需将策略更改为IDENTITY
即可解决问题。
以上是 我无法生成自动递增的ID,并且休眠始终生成1,因为ID 的全部内容, 来源链接: utcz.com/qa/260760.html