java - 如何让实体读取数据库配置

标签 java jpa architecture ejb

考虑实体需要读取某些数据库配置以设置某些值的问题: 例如:

@entity
public class person{
int age,
String ageCategory;
}
设置age时,将从数据库中获取

ageCategory。 我的问题是,为了从数据库读取 AgeCategoryConfiguration,最好使用什么 EJB 架构。目前我正在使用jndi注入(inject)AgeCategoryFacade,它提供了一种从年龄获取AgeCategory的方法,该方法在age中调用 二传手

有没有更好的方法。

最佳答案

也许您想查看jpa Events

您说过,当设置年龄时,将从数据库中获取ageCategory,我认为该语句适合 @PostLoad注解。

如果您想了解更多信息,请阅读this nice article 。通常,注入(inject) ejb 时不需要 jndi 路径。

编辑 我会让事情尽可能简单。

所以你应该有一些在 JSF 中使用的 bean 以及更新人员的方法:

@Named
@SessionScoped
public class PersonController {

    @Inject
    private PersonService personService;

    private Person selectedPerson;

    /**
     * Method for updating.
     */
    public void updatePerson(ActionEvent actionEvent){
        Person updatedPerson = personService.update(selectedUser);
        // pass updatedPerson to presentation layer..
    }
}

接下来你应该有 PersonService 来处理 Person 的 CRUD operations :

@Stateless
@LocalBean
public class PersonService {

    @PersistenceContext
    private EntityManager em;

    @Inject
    private AgeCategoryFacade ageCategoryFacade;

    public Person updatePerson(Person person) {
         // use ageCategoryFacade somehow to set ageCategory for example:
         String ageCategory = ageCategoryFacade.getAgeCategory(person.getAge());
         person.setAgeCategory(ageCategory);
         return (Person) em.merge(person);
    }
}

请注意,您也可以在 createPerson、findPerson 等其他方法中使用ageCategoryFacade。

JPA事件的解决方案涉及实体Bean中的PostLoad(或PrePersist)方法:

@Entity
public class Person {
    int age;
    String ageCategory;

    /**
     * Simple setting of ageCategory.
     */
    @PostLoad
    public void postLoadPerson {
        if(age < 10) {
            setAgeCategory("A");
        } else if (age < 30) {
            setAgeCategory("B");
        } else {
            setAgeCategory("C");
        }
    }
}

关于java - 如何让实体读取数据库配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29409828/

相关文章:

从 JNI 运行时,Java ShutdownHook 无法加入主线程

java - 为什么我得到 Only ancestor queries are allowed inside transactions 错误

java - 如何动态添加JButton到JPanel?

java - 无法将数据库状态与 session 同步

c# - 从第三方数据源导入数据(开放架构设计)

java - 使用多种编程语言(Python Java C#)构建用于开发 Web 应用程序的基础架构

java - 如何解决这个: Exception encountered during context initialization - cancelling refresh attempt?

java - JPA 标准 API : how to retrieve date in "mm/dd/yyyy" format

architecture - 构建转换应用程序的好例子

java - Spring Data JPA 处理复杂类型