2

我正在将 JPA 2.0 与 Hibernate 4.1.0 一起使用,我的Entity课堂上有以下内容

@Entity
@Table(name = "PRODUCTS")
public class Product {

private String productNo;
private String productDesc;
private Date deliveryDate;
private Date invoiceDate;
private Integer productCurrencyId;
private String productCurrency;

以上将用于显示记录以及CRUD操作的应用程序。

从上面productCurrencyIdproductCurrency将在应用程序中用于选择货币的下拉字段

我想知道将这两个放在单独的实体类中还是在同一个Product类中使用是否更好?我问这个是否在同一个Product班级的原因我如何查询货币下拉列的值?

我知道我可以@NamedQueries在 Product 类调用@NamedQuery(name中使用DAOImpl来检索下拉记录。如果我想使用,@NamedQuery(name那么我有硬编码一个 sql 语句,对吗?@NamedQuery(name 如果我不使用单独的实体类来获取下拉值,我是否可以使用任何方法或其他机制来获取货币下拉记录?这种情况的最佳方法是什么?

任何帮助都是非常可观的。

谢谢

编辑 1

我想问的关于 Entity 类的另一个问题是,如果我有一些其他带有下拉列的字段,我应该为所有这些下拉字段创建单独的 Entity 类吗?

4

2 回答 2

2

您想在哪里存储货币列表?正如 Carsten 解释的那样,他们可以在数据库中拥有自己的表(因此也可以拥有自己的实体),并且您将在 Product 和 Currency 之间建立 @OneToOne 关系:

@Entity
public class Product
{
    ...
    private String productNo;
    private String productDesc;
    private Date deliveryDate;
    private Date invoiceDate;

    @OneToOne
    @JoinColumn(name="currencyId")
    private Currency currency;
    ...
}

@Entity
public class Currency
{
    @Id
    private int id;

    private String currency;
}

然后要填充下拉列表,您只需从 Currency 表中检索所有记录:

TypedQuery<Currency> query = entityManager.createQuery("SELECT c FROM Currency c");
List<Currency> query.getResultList();

这很方便,因为要添加货币,您只需在货币表中添加一条记录,下拉菜单将显示正确的值。

如果您的目录不太可能更改,则可以使用枚举而不是数据库中的表:

@Entity
public class Person
{
    ...
    public enum Gender {male, female};

    @Enumerated(EnumType.STRING)
    private Gender gender;
}

并填充下拉列表:

Person.Gender.values();

因此,基本上这取决于目录是否可能更改以及您希望如何处理这些更改。

于 2013-06-05T20:53:31.697 回答
1

除了技术实现之外,我将为货币创建一个自己的实体,因为它是它自己的业务对象。货币的变化不需要应用于每个产品。但是除了将其作为自己的实体的个人偏好之外,我无法就潜在的技术问题给出任何真正的建议。:(

于 2013-06-05T08:05:57.837 回答