如何为OneToOne关系设置值?

问题描述

我有2个定义为一对一的模型。

@Entity
@Table(name = "Form_Item_Production")
public class FormItemProduction {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "item_id",nullable = false)
    private Long itemId;

    @OnetoOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "shift_lookup_id")
    private AppLookup appLookup;

    getter and setter
}

一个是查找表

@Entity
@Table(name = "App_Lookup")
public class AppLookup {

    @Id
    @GeneratedValue
    @Column(name = "Lookup_Id",nullable = false)
    private Long lookupId;

    @Column(name = "Lookup_Name",length = 30,nullable = false)
    private String lookupName;

    getter and setter
}

我尝试将DB中的“ shift_lookup_id”中的值添加到sysout打印中,并且两个表之间的关系正常工作,因为我能够打印出正确的值

for (FormItemProduction x : a) {
    System.out.println("YEAH RIGHT " + x.getAppLookup().getLookupName());
}

由于我只在数据库中手动添加了值,所以我现在试图从我的jsp文件中保存值,但不完全知道在输入中写什么:

 <form:input path="formItemProduction.shiftLookupId" />

这样做不会将jsp的值保存到我绑定的模型中。我试图在我的实体中添加一个额外的字段

@Column(name = "shift_lookup_id",nullable = true)
private String shiftLookupId;

但是它抛出了错误

org.hibernate.MappingException: Repeated column in mapping for entity: com.mamee.factory.security.entity.FormItemProduction column: shift_lookup_id (should be mapped with insert="false" update="false")

有什么想法如何正确地以输入形式输入路径?还是需要更改模型?

解决方法

使用以下方法修复:

<form:input path="formItemProduction.appLookup.lookupId" />

能够存储来自jsp的值并传递给我的控制器模型