用于下拉列的JPA实体

时间:2013-06-05 07:42:11

标签: hibernate jpa entity jpa-2.0

我正在使用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将在应用程序中用于选择货币的下拉字段

我想知道将这两个放在一个单独的Entity类中或者在同一个Product类中使用是否更好?我之所以问这个是否在同一Product课程中的原因如何查询我的下拉列中的货币值?

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

任何帮助都非常值得赞赏。

由于

修改1

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

2 个答案:

答案 0 :(得分:2)

您想在哪里存储货币列表?正如Carsten所解释的那样,他们可以在数据库中拥有自己的表(因此也就是自己的实体),并且您将在产品和货币之间建立@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();

所以基本上它取决于目录是否可能发生变化以及您希望如何处理这些变化。

答案 1 :(得分:1)

除了技术实现之外,我会为货币创建一个自己的实体,因为它是自己的业务对象。并且不需要对每种产品应用货币变化。但是,除了我个人倾向于将其作为一个自己的实体之外,我无法对基础技术问题给予任何真正的支持。 :(