我有一个关于实体创建的问题。说我有以下各表JPA实体创建 - 对象与“基元”
create table "foo" (
"id" integer primary key,
"name" varchar
);
create table "bar" (
"id" integer primary key,
"name" varchar,
"fk_foo" integer references foo(id)
);
我不知道这将是最好的实体,使用Foo对象在实体类的外键引用或实体使用一个整数。
使用NetBeans 6.9我生成以下实体:
@Entity
@Table(name = "bar")
@NamedQueries({
@NamedQuery(name = "Bar.findAll", query = "SELECT b FROM Bar b"),
@NamedQuery(name = "Bar.findById", query = "SELECT b FROM Bar b WHERE b.id = :id"),
@NamedQuery(name = "Bar.findByName", query = "SELECT b FROM Bar b WHERE b.name = :name")})
public class Bar implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@JoinColumn(name = "fk_foo", referencedColumnName = "id")
@ManyToOne
private Foo foo;
public Bar() {
}
@Entity
@Table(name = "foo")
@NamedQueries({
@NamedQuery(name = "Foo.findAll", query = "SELECT f FROM Foo f"),
@NamedQuery(name = "Foo.findById", query = "SELECT f FROM Foo f WHERE f.id = :id"),
@NamedQuery(name = "Foo.findByName", query = "SELECT f FROM Foo f WHERE f.name = :name")})
public class Foo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "foo")
private Collection<Bar> barCollection;
public Foo() {
}
现在,当我去创建一个新的酒吧对象我也必须创建一个新的Foo对象。所以我创建了以下栏。请记住,我将setter和除默认构造函数外的所有实体都留在实体之外。
Bar bar1 = new Bar(1); 0121.jpg(“wheatly”); bar1.setFoo(new Foo(1));
相对于使用整数的字段类型的Foo:
酒吧BAR2 =新栏(1); bar2.setName(“GlaDOS”); bar2.setFoo(1);
我宁愿自己的第二种方法。有第一条路线更好的理由吗?我遇到的一个问题是解编XML我已经组合了实体和JAXB对象,并且在它们的情况下,Foo对象被设置为完全为空的Foo对象而不是ID为1的Foo对象。
您认为?
请注意我知道一个Integer对象不是一个原始的,我只是不能想出一个更好的方式来描述它,对象和对象听起来不是helfpul。 – grantk 2011-04-20 17:14:25
“包装类”如何? – AbdullahC 2011-04-20 17:18:26