这比标题看起来更复杂。这是问题所在:
我有一个Spring Web Flow应用程序,它是一系列表单,用户按特定顺序浏览。两个表单,我们称之为“表单2”和“表单3”,填充相同数据库表的不同字段,我们称之为“公司”。麻烦的是,Company表是所有不可空的字段。因此,当用户填写“表单2”字段并尝试保存时,“表单3”字段必须填充一些内容。例如,我必须在“员工人数”字段中保存外键值。
然后,在“表单3”中,我必须重新读取这些字段并忽略刚刚写入的值,并向用户显示一个空白表单。我想在FK字段中保存“sentinel”值,并在重新读取时检测它。但是我正在使用Hibernate并且我无法确定正确的语法以使Hibernate在这种情况下保存本质上是“无效”的外键。
我需要标记的表字段是:
NUMBER_OF_EMPLOYEES CHAR(1) DEFAULT ' ' NOT NULL
该列为NOT NULL
,因此我不能只在其中添加NULL
。我需要将垃圾数据放入Hibernate / JPA关系:
@ManyToOne(optional=true)
@JoinColumn(name = "NUMBER_OF_EMPLOYEES", nullable = true)
private NumberOfEmployees numberOfEmployees;
如果有效密钥是“A”,“B”和“C”,我想把“X”放在这里。这是可能的,如果是的话,怎么样?
答案 0 :(得分:2)
答案:您至少没有修改数据库中的基础表,因为您的数据库服务器将强制执行not-null属性,即使Hibernate没有。如果没有使用下面信息的能力,最好的办法就是在会话中传递一个逐渐被数据填满的对象。
但是,既然你提到你正在使用Spring,也许你可以实现AbstractWizardFormController
。这允许您随时填充数据,一旦用户完成最后一页,您就可以将所有数据提交给数据库。
请在此处查看javadoc:
和这里的教程:
答案 1 :(得分:0)
怎么样“-1”,你不能滥用系统。更改您的设计或按照您的定义使用它。 你也可以删除“not null”(听起来比使用“-1”更好)。