jpa ManyToOne 绑定问题

再使用jpa的时候,Product对象引用了一个Shop对象,两者的关系是多对一的关系。
于是使用下面代码:

@Entity
@Table(name = "shop")
public class Shop {
    @Id
    private Long id;
    
    private String name;
    
    // 省略get set

}


@Entity
@Table(name = "product")
public class Product{
    @Id
    private Long id;
    
    private String name;
    
    @ManyToOne
    @JoinColumn(name = "shop_id")
    private Shop shop;
    
    // 省略get set
}

启动程序报下面错误:

org.hibernate.MappingException: Could not determine type for: com.xxx.xxx.shop.Shop, at table: product, for columns: [org.hibernate.mapping.Column(shop)]

当吧@ManyToOne@JoinColumn(name = "shop_id")加到getShop方法时,又正常了。不报错了。

    @ManyToOne
    @JoinColumn(name = "shop_id")
    public Shop getShop() {
        return shop;
    }

有没有哪位大神知道是为什么呢?有没有办法吧注解加到熟悉上不报错的方法呢?感觉放在get方法上怪别扭的。

阅读 5.1k
1 个回答
  • 注解最好放在方法前,而不要放在属性名前(Best
    Practice),因为属性一般都是私有的,放属性前面会破坏java的封装性,一般不要直接访问私有成员变量。
  • 事实上,你既可以保持字段的持久性(注释写在成员变量之上),也可以保持属性(注释写在getter方法之上)的持久性。
  • 如果写在属性前面,所有字段都要写在属性前;如果写在getter方法前面,所有字段都写在getter方法前面;必须保持一致,否则程序报错很难排查!应该尽量避免混合使用这两种访问类型。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进