如何为属性提供值如果它是实体的类型?

时间:2014-08-28 09:24:44

标签: java hibernate jpa

我有PERSON,ACCOUNT,PERSON_ACCOUNT(对于人和帐户的多对多关系)表和实体。 现在Account的类型有储蓄,公司,薪水...... 此类型是ACCOUNT_TYPE表中的预定义值。(已创建的表)。

我很好地定义了关系。 Account

的小代码
class Account{ 
private AccountType acctype;
}

现在我要创建

                      Person p = new Person();
                      p.setFirstName();
                      p.setLastName();

                      Account account=new Account();
                      account.setAccountType() ? // how I get predefine value from database to here?

                  Set accounts; // other code to create set
                  p.setAccounts(accounts);

我的问题是我如何写account.setAccountType(accountTypeEntity.getAccountType())? 它不应该将数据插入ACCOUNT_TYPE表。

3 个答案:

答案 0 :(得分:2)

您需要在数据库中查询正确的AccountType,然后在此处指定值。

使用JPA时,Java中的所有对象必须在数据库中具有相应的实体。您无法保存或保留具有JPA映射器无法在数据库中找到的字段的对象。

然后转到您的会话并运行您想要的帐户类型的查询并分配结果。

答案 1 :(得分:0)

您需要编写一个查询来选择要与新帐户关联的AccountType,然后执行

account.setAccountType(objectYouGotFromQuery);

答案 2 :(得分:0)

取决于定义枚举/类AccountType的位置。如果AccountType是枚举,则JPA会自动将枚举转换为DB中的varchar。

public enum AccountType {
   SAVING, CORPORATE, SALARY
}

然后你可以使用:

account.setAccountType(AccountType.SAVING);
//save the account to DB