我有两个表Text和继承的 TextUser。
文本包含:id、textType
TextUser包含:id、语言环境、名称、标题
TextUser.id是Text.id的外键。所以加入的例子是:
Text.id - Text.textType - TextUser.id - TextUser.locale - TextUser.name
100 1 100 en name1
100 1 100 fr name2
101 1 101 en name3
因此,有了键 100,我们在 Text 中有一条记录,在 TextUser 中有两条具有相同 id 但不同语言环境(en、fr)的记录。
这是一个遗留系统,所以我不能修改结构。现在我正在尝试用hibernate处理它。
@Entity(name = "Text")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Text {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "TextId")
private Long id;
@Column(name = "TextType")
private Integer textType;
和
@Entity
@Table(name = "TextUser")
@ForeignKey(name = "FK_TextUser_Text")
public class TextUser extends Text {
@Column(name = "locale")
private String locale;
@Column(name = "name")
private String name;
所以它适用于一个语言环境。但是我怎样才能用键 100 插入新值,但是新的语言环境呢?我们在 Text 中有 ID,hibernate 将它用于外键 TextUser.id。因此,如果我明确设置 id 但不同的语言环境,我将得到“org.hibernate.NonUniqueObjectException:具有相同标识符值的不同对象已与会话关联”