【问题标题】:How to manually set a value for @GeneratedValue如何手动设置 @GeneratedValue 的值
【发布时间】:2020-04-02 10:42:53
【问题描述】:

使用 Spring Data JPA 进行 Spring 启动。 Postgres 数据库。

一般实体:

@Entity
@Table
class Entity {

@Id
@GeneratedValue
private int id;

}

当我尝试使用指定的 id 值创建条目时,结果我看到它被 @GeneratedValue 忽略并生成。

如何克服这个问题?

【问题讨论】:

  • 您使用的是 jpa 存储库还是 crud ?
  • 顺着 CRUD repo 的流程走
  • 尝试让你的仓库继承自 JpaRepository
  • 检查这个可能有帮助..stackoverflow.com/questions/89439/…
  • @Yosra,试过了。一样

标签: jpa id-generation


【解决方案1】:

发布解决方案,我在对整个持久过程进行调试后得出了该解决方案(不是说这是正确的方法,但我确实没有找到任何“可能我配置错误”的地方):

public class MyGenerator extends SequenceStyleGenerator {

    @Override
    public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
        return Optional.of(object)
                .filter(Entity.class::isInstance)
                .map(Entity.class::cast)
                .map(Entity::getId)
                .filter(i -> i > 0)
                .map(Serializable.class::cast)
                .orElse(super.generate(session, object));
    }
)

和实体:

@Entity
class Entity implements Serializable {

@GenericGenerator(name = "myGenerator", strategy = "org.a.b.c.generators.MyGenerator")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "myGenerator")
    private Integer id;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2012-02-23
    • 2012-08-13
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多