是否有可能强制Hibernate嵌入实体?

Ste*_* K. 2 java orm hibernate jpa hibernate-mapping

在我的用例中,我想要一个实体中的@Embedded一个类C.

另一个实体是指C@OneToMany关联,并因此C都被注解@Entity.

我知道这似乎是糟糕的设计,但我相信它在我的情况下非常有意义.

是否有可能强制Hibernate嵌入实体?如果我尝试一下,Hibernate抱怨缺少c的id属性的setter.

我认为问题来自于:

@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
Run Code Online (Sandbox Code Playgroud)

ram*_*inr 6

为什么不创建您想要的实体,并在该实体中嵌入C.这样,在两个类中都有C,一个是嵌入式的,另一个是新实体的嵌入式.

@Embeddable
public class Contact {
    private String firstname;
    private String lastname;
    // getters and setters removed.
}
Run Code Online (Sandbox Code Playgroud)

这是你的嵌入类:

@Entity
public class Student {
    @Embedded
    private Contact contact;    
}
Run Code Online (Sandbox Code Playgroud)

这里也是嵌入联系的新实体

@Entity
public class FirmContact {
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int contactId;

    @Embedded
    private Contact contact;
}
Run Code Online (Sandbox Code Playgroud)

最后,坚持联系的班级必须是一个实体:

@Entity
public class Business {
    @OneToOne(cascade=CascadeType.ALL)
    private FirmContact contacts;
}
Run Code Online (Sandbox Code Playgroud)

在java中填充对象只需要几个额外的步骤,但它应该进行你想要的映射.我希望这有帮助.