小编Mic*_*ael的帖子

具有共享ID的JPA @OneToOne - 我可以做得更好吗?

我正在使用现有的架构,我宁愿不改变.架构具有表Person和VitalStats,其中人具有主键和VitalStats使用相同的字段作为其两个主密钥及其外键的人,这意味着它的值是对应的PK的值之间的一对一的关系人

这些记录由外部进程创建,我的JPA代码永远不需要更新VitalStats.对于我的对象模型,我希望我的Person类包含一个VitalStats成员,但是:

当我尝试

@Entity
public class Person{
    private long id;
    @Id
    public long getId(){ return id; }

    private VitalStats vs;
    @OneToOne(mappedBy = “person”)
    public VitalStats getVs() { return vs; }
}

@Entity
    public class VitalStats{
     private Person person;
    @OneToOne
    public Person getPerson() { return person; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个问题,即VitalStats没有@Id,这对@Entity不起作用.

如果我试试

@Id @OneToOne
public Person getPerson() { return person; }
Run Code Online (Sandbox Code Playgroud)

解决@Id问题,但要求Person可序列化.我们会回过头来看看.

我可以做VitalStats @Embeddable并通过@ElementCollection连接到人,但那就必须作为一个集合来进行访问,尽管我知道,只有一个元素.可行,但既有点烦人又有点混乱.

那么是什么阻止我只是说Person实现了Serializable?没什么,真的,除了我喜欢我的代码中的所有东西都存在,并且我看不到任何逻辑,这使得我的代码可读性降低.

与此同时,我刚刚用一个很长的人替换了VitalStats中的Person字段并制作了VitalStats的@Id,所以现在@OneToOne正常工作.

所有这些解决方案似乎什么(我)像一个简单的问题是有点笨重,所以我不知道是否我缺少什么,或者是否有人可以至少向我解释为什么人必须是序列化.

TIA

java jpa one-to-one

63
推荐指数
2
解决办法
4万
查看次数

如何在JavaFX中使用Preferences中的值加载FXML?

从FXML文件加载时,我正在使用看似典型的JavaFX start()方法:

    public void start(Stage stage) throws Exception {
    this.stage = stage;
    Scene scene = new Scene(FXMLLoader.<AnchorPane>load(getClass().getResource("layout.fxml")));
    stage.setScene(scene);
    stage.show();
}
Run Code Online (Sandbox Code Playgroud)

我有一些与控件对应的变量,例如:

    @FXML private TextField userName;
Run Code Online (Sandbox Code Playgroud)

我想将userName初始化为Preferences中的值,如下所示:

    prefs = Preferences.userRoot().node(this.getClass().getName());
    userName.setText(prefs.get("userName", userName.getText()));
Run Code Online (Sandbox Code Playgroud)

但我什么时候可以打电话给他?如果我在stage.show()之前执行此操作,则userName尚未实例化.

TIA

javafx-2

3
推荐指数
1
解决办法
6711
查看次数

标签 统计

java ×1

javafx-2 ×1

jpa ×1

one-to-one ×1