hibernate SQL插入语句不自动生成ID

4zcjmb1e  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(135)

我目前正在学习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

txu3uszq

txu3uszq1#

你在这里以一种糟糕的方式混合技术。
该配置

@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String id;

将导致JPA生成一个新的UUID,并在使用JPA* 持久化实体 * 时将实体的id设置为该UUID。
但是您并没有使用JPA来持久化实体。您正在使用JDBC,它对JPA注解一无所知。
如果你对实体使用EntityManager.persist或者(因为你标记了问题spring-data-jdbcCrudRepository.save,实体的id应该会像预期的那样设置。

相关问题