【问题标题】:Assignment of @GeneratedValue to otherthan ID column将 @GeneratedValue 分配给 ID 列以外的列
【发布时间】:2011-11-17 06:15:47
【问题描述】:

我有一个如下模型:

@Entity
@Table(name="QUESTIONNAIRE")
@SequenceGenerator(name = "RA_QA_SEQ", sequenceName = "RA_QUESTIONNAIRE_SEQ")
public class Questionnaire {

    @Id
    @GeneratedValue(generator = "RA_QA_SEQ")
    @Column(name = "QUESTID")
    private long questionID;

    @Column(name = "QUESTION")
    private String question;

    @GeneratedValue(generator = "RA_QA_SEQ")
    @Column(name = "QUESTORDER")
    private long questionOrder;

    @Column(name = "QUESTCATEGORYID")
    private long questionCatgoryID;

        ....... list of setters and getters.......
}

在这里,我希望也为 DB 中的“questionOrder”列插入“questionID”值。我想将@GeneratedValue(generator = "RA_QA_SEQ") 给“questionOrder”,但我仍然在 DB 中为“questionOrder”得到 0,但“questionID”得到正确的序列值。

请建议我如何将“questionID”的值也变为“questionOrder”。

【问题讨论】:

    标签: hibernate spring-mvc


    【解决方案1】:

    来自 JPA 2.0 规范:

    11.1.17 GeneratedValue 注解

    GeneratedValue 注释提供了 主键值的生成策略。这 GeneratedValue 注释可以应用于主键属性或 实体或映射超类的字段与 Id 结合 注释

    便携式应用程序不应在 其他持久性字段或属性。

    如果您只想让 questionOrder 保持相同的值,我认为您可以这样做:

    // 2 fields are mapped to the same column, so one of these needs to be read-only
    @Column(name = "QUESTID", insertable=false, updateable=false)
    private long questionOrder; 
    

    HTH。

    【讨论】:

    • 使用上述方法,将在表中为 questionOrder 而不是 questid 插入空值。我是否需要使 insertable =true?
    • 你的意思是questionId属性(列=QUESTID)也为空?这两个属性指的是同一列,那么是不是意味着questionOrder覆盖了你生成的ID?
    • questionId 正在正确地从序列中获取值并正确插入数据库,但在进行更改后“@Column(name = "QUESTID", insertable=false, updateable=false) private long questionOrder;" questionOrder 正在获取 (null) 并将 (null) 插入到 DB 表中,而不是 questionID 的相同值
    • 空值的列名是什么?
    • 列名问题订单。我已经替换了 @GeneratedValue(generator = "RA_QA_SEQ") @Column(name = "QUESTORDER") private long questionOrder; by @Column(name = "QUESTID", insertable=false, updateable=false) private long questionOrder;正如你所建议的。但我不知道 questionOrder 将如何获得与 questionID 相同的值?
    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    相关资源
    最近更新 更多