У меня вопрос к созданию сущности.Скажем, у меня есть следующие таблицы
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() {
}
Теперь, когда мне нужно пойти и создать новый объект Bar, я должен также создать новый объект Foo.Поэтому я создаю следующую панель.Помните, что я оставил сеттеры и все конструкторы, кроме стандартных, вне сущностей.
Bar bar1 = new Bar (1);bar1.setName ( "wheatly");bar1.setFoo (new Foo (1));
В отличие от использования целочисленного типа поля для Foo:
Bar bar2 = new Bar (1);bar2.setName ( "GlaDOS");bar2.setFoo (1);
Я бы предпочел второй способ сам.Есть ли причина, по которой лучше идти по первому маршруту?Одна проблема, с которой я столкнулся, заключается в немаршалинге XML. Я объединил сущности и объекты JAXB, и в их случае объект Foo получает полностью нулевой объект Foo вместо объекта Foo с идентификатором 1.
* 1018ты думаешь?