我正在使用现有的架构,我宁愿不改变.架构具有表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
从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