Java hibernate在保存对象时更改id

Java hibernate在保存对象时更改id,java,hibernate-5.x,Java,Hibernate 5.x,我有一个具有这个参数的对象 { "id" : "36461dd3-2bdb-42de-8e3d-b44e28696b1e", "race" : "HUMAN", "age" : "18", "name" : "Alisa" } 我试图拯救它 List<MainFemaleCharacter> batch = Arrays.asList(sampleMainCharacter()); try (Session session = sessionFacto

我有一个具有这个参数的对象

{
  "id"    : "36461dd3-2bdb-42de-8e3d-b44e28696b1e",
  "race"  : "HUMAN",
  "age"   : "18",
  "name"  : "Alisa"
}
我试图拯救它

List<MainFemaleCharacter> batch = Arrays.asList(sampleMainCharacter());
try (Session session = sessionFactory.openSession()) {
    session.beginTransaction();
    batch.forEach(session::save);
    session.getTransaction().commit();
}
注释
@GeneratedValue
将自动生成一个id。它与
@GeneratedValue(strategy=GenerationType.AUTO)
注释相同

GenerationType.AUTO意味着持久性提供程序选择一种策略,在您的情况下,该策略将在服务器重新启动后重新启动值


我建议您考虑使用<代码> EngutyType。序列< /代码>。 因为ID值是

@GeneratedValue
我猜你的
@GeneratedValue
是通过itself@Jens@Nathan如果没有
id
提供,我可以将其设置为生成吗?他应该使用
update
@Jens,因为当他使用
save
@Jens时,它会保存另一个对象,所以实际上无法使用如果id不存在,则已使用generation设置id。我希望为应用程序提供已预定义id的实体(从外部源加载,但没有id),例如在应用程序中创建的实体。
@Entity
@Table(name="main_female_character")
@EqualsAndHashCode(callSuper=true)
@ToString(callSuper=true)
public @Data class MainFemaleCharacter extends BasicCharacter {
}

@MappedSuperclass
@EqualsAndHashCode(callSuper=true)
@ToString(callSuper=true)
public @Data class BasicCharacter extends UidNamedObject {
    @OneToOne
    private Race race;
    private int age;
}

@MappedSuperclass
public @Data class UidNamedObject {
    @Id
    @GeneratedValue
    private UUID id;
    @Column(unique=true)
    private String name;
}