java - 没有外键的 JPA OneToOne 关联无法正常工作

标签 java hibernate jpa

我正在使用 Hibernate/JPA,并且有 3 个表:

Contact
pk contact_id
fk member_id

Employee
pk employee_id
fk member_id

Members
pk member_id

我有:

@Entity(name = "Contact" )
public class Contact implements Serializable {

    @Id
    @SequenceGenerator(allocationSize = 1, name = "contact_sequence", sequenceName = "contact_ids")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "contact_sequence")
    private java.lang.Long contact_id;

    @OneToOne(cascade = CascadeType.ALL, targetEntity = Members.class)
    @JoinColumn(name = "member_id")
    private Members member;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "member", referencedColumnName = "member")
    private Employee employee;

@Entity(name = "Employee")
public class Employee implements Serializable {

    @Id
    @SequenceGenerator(allocationSize = 1, name = "employee_sequence", sequenceName = "employee_ids")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "employee_sequence")
    private java.lang.Long employee_id;

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

    @Id
    @SequenceGenerator(allocationSize = 1, name = "members_sequence", sequenceName = "member_ids")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "members_sequence")
    private java.lang.Long member_id;

我的问题出在Contact实体private EmployeeEmployee;上。当我启动 Jboss 服务器时:

StartException in service jboss.persistenceunit.

问题

如何在 Contact 实体上注释 private Employee 员工;

谢谢

最佳答案

您几乎正确地定义了 private Members 成员;,那么是否有理由不对 private Employee 员工; 执行相同的操作?

喜欢:

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "employee", referencedColumnName = "employee_id")
private Employee employee;

也是一个简单的link ,只是为了交叉检查整体 @JoinColumn 功能

===编辑===

看起来确实存在数据结构问题,因为从一开始关系就是ManyToOne,

如果您可以尝试以下示例:

//Employee
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "contact_id", referencedColumnName = "contact_id")
    private Contact contact;

//Contact
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "employee_id")
    private List<Employee> employees = new ArrayList<>();

然后通过选择 contact.getEmployees() 应该可以解决问题

关于java - 没有外键的 JPA OneToOne 关联无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61884640/

相关文章:

Java NIO 在目录中搜索文件

java.lang.NoSuchMethodError : org. apache.commons.logging.LogFactory

java - 记录 Hibernate 查询 - 在 log4j.properties 和 persistence.xml 中设置?

java - 为什么我们在使用@TransactionAttribute的时候还要使用@Stateless? EJB

java - 从 EclipseLink 切换到 Hibernate

java - 适用于 Android 的 Firebase 实时(在线)数据库的安全性如何?

java - 如何判断一个Java类是否是抽象的?

java - Spring 从 REQUIRED_NEW 方法调用 REQUIRED 方法

hibernate - 由 : java. lang.IllegalArgumentException 引起 : java. lang.Object 不是索引实体或索引实体的子类

java - JPA 和 MySQL 映射实体