需要一个Hibernate中主键@OneToOne映射的示例

Ale*_*all 5 java annotations hibernate one-to-one

有人可以给我一个Hibernate中单向@OneToOne主键映射的例子吗?我尝试了很多种组合,到目前为止,我得到的最好的东西是:

@Entity
@Table(name = "paper_cheque_stop_metadata")
@org.hibernate.annotations.Entity(mutable = false)
public class PaperChequeStopMetadata implements Serializable, SecurityEventAware {

private static final long serialVersionUID = 1L;

@Id
@JoinColumn(name = "paper_cheque_id")
@OneToOne(cascade = {}, fetch = FetchType.EAGER, optional = false, targetEntity = PaperCheque.class)
private PaperCheque paperCheque;
}
Run Code Online (Sandbox Code Playgroud)

每当Hibernate尝试自动生成上述映射的模式时,它会尝试将主键创建为blob,而不是long,即PaperCheque的id类型.有人能帮帮我吗 ?如果我无法得到一个确切的解决方案,那么接近就会有所作为,但我会感激任何回应.

act*_*.se 5

当我实现了几个@OneToOne映射时,我保存了这个讨论,我希望它对你也有用,但是我们不让Hibernate为我们创建数据库.

请注意GenericGenerator注释.

无论如何,我有这个代码工作:

@Entity
@Table(name = "message")
public class Message implements java.io.Serializable
{
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @PrimaryKeyJoinColumn(name = "id", referencedColumnName = "message_id")
    public MessageContent getMessageContent()
    {
        return messageContent;
    }
}

@Entity
@Table(name = "message_content")
@GenericGenerator(name = "MessageContent", strategy = "foreign",
    parameters =
    {
      @org.hibernate.annotations.Parameter
      (
        name = "property", value = "message"
      )
    }
)
public class MessageContent implements java.io.Serializable
{
    @Id
    @Column(name = "message_id", unique = true, nullable = false)
    // See http://forum.hibernate.org/viewtopic.php?p=2381079
    @GeneratedValue(generator = "MessageContent")
    public Integer getMessageId()
    {
            return this.messageId;
    }
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*arr 2

您的目的是在 PaperChequeStopMetaData 和 PaperCheque 之间建立 1-1 的关系?如果是这样,您不能将 PaperCheque 实例定义为 PaperChequeStopMetaData 的 @Id,您必须在 PaperChequeStopMetaData 中定义一个单独的 @Id 列。