哪些变量在JavaFX/Hibernate应用程序中使用

Mic*_*213 3 java hibernate javafx

假设我们Entity/Class想要在JavaFX组件中的TableView中填充一个Person.

我应该在什么类型的数据中填充Person类 - String或者SimpleStringProperty

在这两种情况下,我都没有完全得到我想要的东西.如果我将使用String变量,我将无法收听在TableView中完成的任何更改(根据postClickMe).另一方面,如果我将使用SimpleStringProperty我将得到和异常,hibernate无法转换SimpleStringProperty为String,这是在数据库中使用的类型.怎么能更巧妙地完成呢?

@Entity
public Person {
    private String name;     // or SimpleStringProperty
    private String Surname; // or SimpleStringProperty

    // getter and setters removed to simplify example
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*s_D 5

使用a StringProperty,并确保Hibernate通过get/set方法访问属性,而不是通过字段本身.(这是使用"属性访问"引用的,而不是"字段访问".)如果确保所有注释都放在方法而不是字段上,这将自动发生,或者您可以使用@Access(AccessType.PROPERTY)它来使其明确:

@Entity
@Access(AccessType.PROPERTY)
public class Person {

    private final StringProperty name = new SimpleStringProperty();
    private final StringProperty surname = new SimpleStringProperty();

    @Column("name") // not needed, just illustrating the annotations, if needed, go here
    public String getName() {
        return nameProperty().get();
    }

    public void setName(String name) {
        nameProperty().get(name);
    }

    public StringProperty nameProperty() {
        return name ;
    }

    // etc...
}
Run Code Online (Sandbox Code Playgroud)

有关完整的讨论,请参见http://svanimpe.be/blog/properties-jpa.html.