我目前正在学习Hibernate,我计划使用PreparedStatement向数据库中插入一条记录。但是,插入查询似乎不会自动为我的记录生成UUID。
@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user_details")
@SuperBuilder(toBuilder = true)
public class User extends Base {
@NonNull
@Column(unique = true)
private String userName;
@Data
@MappedSuperclass
@NoArgsConstructor
@SuperBuilder(toBuilder = true)
public class Base {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String id;
}
Dao实现
private static final String SAVE_USER = "INSERT INTO user_details(user_name) VALUES(?)";
@Override
public UserDto saveUser(User user) {
Connection connection = null;
PreparedStatement ps = null;
ResultSet resultSet = null;
try {
connection = source.getConnection();
ps = connection.prepareStatement(SAVE_USER);
ps.setString(1, user.getUserName());
try {
ps.execute();
}
catch (Exception e) {
log.error("Failed to save user to db");
}
return findUserByName(user.getUserName());
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
try {
closeAll(resultSet, ps, connection);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
试图理解为什么它不能自动生成id
1条答案
按热度按时间txu3uszq1#
你在这里以一种糟糕的方式混合技术。
该配置
将导致JPA生成一个新的UUID,并在使用JPA* 持久化实体 * 时将实体的
id
设置为该UUID。但是您并没有使用JPA来持久化实体。您正在使用JDBC,它对JPA注解一无所知。
如果你对实体使用
EntityManager.persist
或者(因为你标记了问题spring-data-jdbc)CrudRepository.save
,实体的id应该会像预期的那样设置。