【问题标题】:JoinColumn on OneToMany side not workingOneToMany 端的 JoinColumn 不起作用
【发布时间】:2017-05-17 07:18:33
【问题描述】:

为什么我不能在OneToMany 端创建@JoinColumn?它抛出:

2017-05-17 09:13:34.063  WARN 7724 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Bean creation exception on non-lazy FactoryBean type check: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'roleMapper' defined in file [C:\MyProjects\myjnia\Myjnia_Inzynier\target\classes\com\carwash\mappers\RoleMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in com.carwash.MyjniaInzynierApplication: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available

    . //always the same but with every mapper interface
    .
    .

当我改变方向时 - 将JoinColumn 放在Wash 一侧,它可以工作,但我想从Admin 表中引用Wash

Admin类:

 public class Admin {
        private Integer adminId;
        private User userId;
        private List<Wash> washId;

        @OneToMany(mappedBy = "washAdmin", fetch = FetchType.LAZY)
        @JoinColumn(name = "washId")
        public List<Wash> getWashId() {
            return washId;
        }

Wash类:

public class Wash {
    private Integer washId;
    private String name;
    private WashLocation washLocation;
    private List<Worker> washWorker;
    private List<Reservation> washReservation;
    private List<WashWashType> washTypes;
    private Admin washAdmin;

    @ManyToOne()
    @JsonIgnore
    public Admin getWashAdmin() {
        return washAdmin;
    }

    public void setWashAdmin(Admin washAdmin) {
        this.washAdmin = washAdmin;
    }

【问题讨论】:

  • 请添加完整的堆栈跟踪
  • @Jens 已更新..
  • @JoinColumn 指定 ELEMENT 中列的名称,即在 Wash 中。就是这样。将@JoinColumn 放在WashAdmin 中都没有关系... FK 将始终放在元素中
  • 如果你想在Admin 中有一个FK,那么关系就不是@OneToMany,因为没有物理方法可以用FK 在那一侧建模!!!在这种情况下使用@OneToOne

标签: hibernate jpa hibernate-annotations


【解决方案1】:

在这种情况下,您需要使您的关系成为双向的,您有两个选择,或者您有单向关系并且 joinColumn 将在拥有实体中,或者您将拥有单向。

查看这个例子如何创建单向关系

http://www.codesenior.com/en/tutorial/Hibernate-Unidirectional-OneToMany-and-ManyToOne-Concepts

JoinColumn 应该在 owningentity 中(在你的情况下没有集合的那个),并且 mappedby 应该在 none owningentity 中

【讨论】:

  • 我创建了一个单向连接表,但它没有在Admin 表中为我创建一列...
  • 不与 joinTable ,如果你想在你的表内有一个外键列,你需要在两种类型的关系中使用 ManyToOne 和 OneToMany,joinTable 将创建一个包含两列的联结表如果关系存在,则关系两侧的 ids
  • 所以这就是问题所在......看上面我已经创建了房地产,但它抛出了失败......
猜你喜欢
  • 2017-05-29
  • 2020-01-11
  • 2014-12-01
  • 2020-10-12
  • 2012-01-08
  • 1970-01-01
  • 2012-04-14
  • 2020-07-11
  • 1970-01-01
相关资源
最近更新 更多