我有一個關於實體創建的問題。說我有以下各表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