如何坚持休眠

如何坚持休眠

问题描述:

我有一个名为“令牌请求者”和“证书”的类。每个令牌请求者都有许多证书和证书只有一个令牌请求者。如何坚持休眠

TokenRequestor.java

@Entity 
@Table(name = "TOKEN_REQUESTOR") 
public class TokenRequestor implements Serializable { 

    @Id 
    @SequenceGenerator(name = "TOKEN_REQUESTOR_ID_GENERATOR", sequenceName = "TOKEN_REQUESTOR_ID") 
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "TOKEN_REQUESTOR_ID_GENERATOR") 
    @Column(name = "TOKEN_REQUESTOR_ID") 
    private Long id; 
    @OneToMany(mappedBy = "tokenRequestorId") 
    private List<Certificate> certificates; 

Certificate.java

@Entity 
@Table(name = "CERTIFICATES") 
public class Certificate { 

    @Id 
    @SequenceGenerator(name = "CERTIFICATES_ID_GENERATOR", sequenceName = "SQ_CERTIFICATES_ID") 
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "CERTIFICATES_ID_GENERATOR") 
    @Column(name = "CERTIFICATES_ID") 
    private Long id; 
    @ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.ALL) 
    @JoinColumn(name = "TOKEN_REQUESTOR_ID") 
    private TokenRequestor tokenRequestorId; //Foreign key*/ 

当我插入一个令牌请求者,他们证书必须创建。它们是在证书表中创建的,但TOKEN_REQUESTOR_ID为空。为什么会发生?

POST令牌请求者

{ 
    "domain": "GTW", 
    ..., 
    "certificates": [ 
    { 
     "usage": "ENC", 
     "alias": "encryption_cert", 
     "content": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----" 
    }, 
    { 
     "usage": "DEC", 
     "alias": "decryption_cert", 
     "content": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----" 
    }, 
    { 
     "usage": "SSL", 
     "alias": "communication_cert", 
     "content": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----" 
    }, 
    { 
     "usage": "CA", 
     "alias": "TSP ROOT CA", 
     "content": "-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----" 
    } 
    ] 
} 

你的问题是你定义的关系是双向的,这基本上意味着关系的各个侧面应该有参考对方。

可以说我们有TokenRequestor对象,这个对象有两个证书,只有当这个关系是单向的(你可以把你的关系转换成btw来解决这个问题),这就足够了,对于你需要的双向关系其中一个证书持有对其TokenReguestor的引用。

+0

我有一个/ tokenRequestor资源和/证书资源,可以在两个资源中创建证书。在这种情况下解决单向关系? –

+0

@DanielaMorais无论你将不得不重试并在证书中注入TokenRequestor,或者通过删除ManyToOne(及其引用)并将joinColumn放入没有owningentity(其中OneToMany) –