当前位置: 首页 > 知识库问答 >
问题:

将JavaFX属性和JPA实体放在一起(没有混合模式)

袁晋鹏
2023-03-14

基地

我有一个由JPA(EclipseLink)管理的mysql DB(实体和控制器+持久化单元)。GUI是基于JavaFX的。

信息

    null
    null
public <T, S> Function<T, S> getRefactor() {
    return o -> {
        Object rtn = null;

        //adapt **o** it to JavaFX bean

        return (S) rtn;
    };
}

我想这不是最好的解决办法。

问题没有混合模式!我认为在服务器端使用javafx属性是疯狂的,即使是超级懒惰的实现。

有一个灵活的解决方案,可以拥有JavaFX Bean的所有优点,例如双向绑定,并保持JPA实体代码不变?

所以...我正在使用一个中间层来将两者进行通信。

提前致谢

共有1个答案

葛承教
2023-03-14

我通常主张在JPA实体中使用JavaFX属性:我确实认为没有明显的理由不这样做。

但是,如果希望避免这样做,可以使用JavaBeanPropertyAdapters。这些适配器创建JavaFX可观察属性,包装常规JavaBean属性。所以如果你有一个bean

@Entity
public class Person {

    private String firstName ;
    private String lastName ;

    @Id
    private Integer id ;

    public String getFirstName() {
        return firstName ;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName ;
    }

    public String getLastName() {
        return lastName ;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName ;
    }
}

然后你可以做一些类似的事情

TableColumn<Person, String> firstNameCol = new TableColumn<>("First Name");
firstNameCol.setCellValueFactory(cellData -> {
    try {
        return JavaBeanStringPropertyBuilder.create()
            .bean(cellData.getValue())
            .name("firstName")
            .build();
    } catch (NoSuchMethodException exc) {
        throw new RuntimeException(exc);
    }
});
public class Person {
    private String firstName ;
    private String lastName ;

    private PropertyChangeSupport pcs ;

    public Person() {
        pcs = = new PropertyChangeSupport(this);
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        pcs.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        pcs.removePropertyChangeListener(listener);
    }

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        String oldName = this.firstName ;
        this.firstName = firstName;
        pcs.firePropertyChange("firstName", oldName, this.firstName);
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        String oldName = this.lastName ;
        this.lastName = lastName;
        pcs.firePropertyChange("lastName", oldName, this.lastName);
    }

}
 类似资料:
  • 我目前的项目是用JavaFX完成的。我使用属性将(双向)视图字段绑定到bean(使用JFXtras的BeanPathAdapter)。 我选择用JPA和ObjectDB作为模型。 这是我第一次在独立的项目中使用JPA,这里我面临的是托管实体的问题。 实际上,我将托管实体绑定到视图字段,当视图字段的值更改时,实体会更新...和数据库也是如此。 我正在尝试找到一种手动保存/合并实体的方法,以便我可以询

  • 谁能告诉我,如何创建一个没有主键的实体? 谢了。

  • 关于以下摘录,关于CQR和ddd,摘自Nick Tune,Scott Millett的领域驱动设计的模式、原则和实践 这是否意味着命令端的域模型可以省略大部分业务属性?对于例如客户实体,它会是什么样子? 客户实体能否省略名字、姓氏等?如果是这样,这些业务属性会在哪里?仅在CustomerEntity的读取模式中? 或者,除了包含所有业务属性的CustomerEntity之外,可能还会有Custom

  • 在ORM映射类上定义具有“混合”行为的属性。 “混合”是指属性在类级别和实例级别定义了不同的行为。 这个 hybrid 扩展提供了一种特殊形式的方法修饰器,大约有50行代码,几乎不依赖于其他的sqlacalchemy。理论上,它可以与任何基于描述符的表达式系统一起工作。 考虑映射 Interval ,表示整数 start 和 end 价值观。我们可以在生成类级SQL表达式的映射类上定义更高级别的函

  • 在我们的项目中,我们有一个实体类,类似如下: 现在,我们希望使用Spring Data JPA来查找具有特定的所有员工,因此我们的EmployeeRepository如下所示:

  • 问题内容: 我有一个具有以下结构的数据库: 当我尝试创建EntityProperty类时 我得到以下异常: 我知道JPA实体必须具有主键,但是由于无法控制的原因,我无法更改数据库架构。是否可以创建将与这样的数据库模式一起工作的JPA(hibernate)实体? 问题答案: 我猜您有一个组合键,其中的外键是。如果是这样,则可以按如下所示进行映射: