将 id 自动生成设置为 object
setting an id autogenerate into an object
抱歉,如果我的post重复了,或者标题没有描述主题,因为我不知道如何在标题中描述这个,我在网上查了,但我没有找到解决方案。
我正在使用 Java 和 JPA。问题是下一个:
我有一个 class A 和一个自动生成的密钥:
class A{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private List<B> listB;
}
并且class B 具有这个类的id:
class B {
@EmbeddedId
private Bid id;
private String att;
}
class Bid {
private int idA;
private String text;
}
我想在控制器中创建一个 object A,问题是当我创建 object A 时,我需要创建 object B,其中 B 的 ID包含自动生成的A的id,它是在实体映射到de数据库的那一刻创建的,我不知道如何将A的自动生成的id设置到idB中,也许我应该查询de数据库询问classA 的 las id 是什么,但它看起来很糟糕。
提前致谢
了解您要解决的一般情况是哪种情况会很有用,因为您使用的结构似乎不必要地复杂。
你真正的目标是什么?
您的案例是派生标识符案例,您的实体 B 的身份是从 A 的主键派生的。对于这种情况,您可以使用 @MapsId 注释,并且您的实体可以像这样重组:
@Entity
public class A {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@OneToMany(mappedBy="a")
private List<B> listB = new ArrayList<B>();
...
}
@Entity
public class B {
@EmbeddedId
private BId id;
@ManyToOne
@MapsId("idA")
private A a;
...
}
@Embeddable
public class BId {
private int idA;
private String att;
...
}
这就是持久化实体的方式:
A a = new A();
BId bid = new BId();
bid.setAtt("text"); // notice that the idA attribute is never manually set, since it is derived from A
B b = new B();
b.setId(bid);
b.setA(a);
a.getListB().add(b);
em.persist(a);
em.persist(b);
查看示例实现 here。
抱歉,如果我的post重复了,或者标题没有描述主题,因为我不知道如何在标题中描述这个,我在网上查了,但我没有找到解决方案。
我正在使用 Java 和 JPA。问题是下一个:
我有一个 class A 和一个自动生成的密钥:
class A{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private List<B> listB;
}
并且class B 具有这个类的id:
class B {
@EmbeddedId
private Bid id;
private String att;
}
class Bid {
private int idA;
private String text;
}
我想在控制器中创建一个 object A,问题是当我创建 object A 时,我需要创建 object B,其中 B 的 ID包含自动生成的A的id,它是在实体映射到de数据库的那一刻创建的,我不知道如何将A的自动生成的id设置到idB中,也许我应该查询de数据库询问classA 的 las id 是什么,但它看起来很糟糕。
提前致谢
了解您要解决的一般情况是哪种情况会很有用,因为您使用的结构似乎不必要地复杂。 你真正的目标是什么?
您的案例是派生标识符案例,您的实体 B 的身份是从 A 的主键派生的。对于这种情况,您可以使用 @MapsId 注释,并且您的实体可以像这样重组:
@Entity
public class A {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@OneToMany(mappedBy="a")
private List<B> listB = new ArrayList<B>();
...
}
@Entity
public class B {
@EmbeddedId
private BId id;
@ManyToOne
@MapsId("idA")
private A a;
...
}
@Embeddable
public class BId {
private int idA;
private String att;
...
}
这就是持久化实体的方式:
A a = new A();
BId bid = new BId();
bid.setAtt("text"); // notice that the idA attribute is never manually set, since it is derived from A
B b = new B();
b.setId(bid);
b.setA(a);
a.getListB().add(b);
em.persist(a);
em.persist(b);
查看示例实现 here。