资讯专栏INFORMATION COLUMN

注解异常 @Column(s) not allowed on a @ManyToOne proper

jiekechoo / 1804人阅读

摘要:跑测试的时候却抛出了异常。大体的意思就是注解异常,注解不能应用在的属性上。而在外键之上用一个不适用于其的注解,当然报错啦。而注解才是官方为我们提供的为外键添加配置的注解。学科类别设置学科类别字段不能为空将修改为,测试通过。

@Column

计量单位类别中,要设置某个字段不能为空。

因为对Hibernate仅仅停留于了解阶段,去慕课网学习了一下Hibernate的注解。

发现讲师介绍的@Column注解有一项nullable(可否为空)属性,默认为true,这里尝试着添加该注解,并将nullable属性设置为false,不可为空。

@ApiModelProperty("学科类别")
@ManyToOne
// 设置学科类别字段不能为空
@Column(nullable = false)
@JsonView({NoneJsonView.class,
        MeasurementUnitCategoryJsonView.getAllByDisciplineId.class})
private Discipline discipline;
异常

跑一下测试确保改这行代码整座桥不会塌。跑测试的时候却抛出了异常。

org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property: com.mengyunzhi.measurement.entity.MeasurementUnitCategory.discipline

大体的意思就是:注解异常,@Column注解不能应用在@ManyToOne的属性上。

话不多说,直接谷歌。

解决方案

打开第一条:Use @JoinColumn instead of @Column。使用@JoinColumn而不是@Column

@Column(s) not allowed on a @ManyToOne property-StackOverflow

大体意思就是,因为加了一个@ManyToOne的注解,所以这个属性就是外键。

package javax.persistence;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Column {

    String name() default "";

    boolean unique() default false;

    boolean nullable() default true;

    boolean insertable() default true;

    boolean updatable() default true;

    String columnDefinition() default "";

    String table() default "";

    int length() default 255;

    int precision() default 0;

    int scale() default 0;
}
解释

看一下@Column注解的源码,我们看到这其中的属性length等显示不是外键应该有的属性,所以推测@Column注解是用于数据表中的普通字段之上。

而在外键之上用一个不适用于其的注解,当然报错啦。而@JoinColumn注解才是官方为我们提供的为外键添加配置的注解。

@ApiModelProperty("学科类别")
@ManyToOne
// 设置学科类别字段不能为空
@JoinColumn(nullable = false)
@JsonView({NoneJsonView.class,
        MeasurementUnitCategoryJsonView.getAllByDisciplineId.class})
private Discipline discipline;

@Column修改为@JoinColumn,测试通过。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69680.html

相关文章

  • 注解的奇妙之旅

    摘要:注解是弃用不再使用的意思。是处理源码级别的注解,它会生成新的字节码或其它文件。这个该怎么实现呢我们需要在启动之后文件转为字节码文件之前,就需要生成对应的和方法,因为它只在编译期有效。我们在启动后,会根据注解,来创建相应的数据表。 导读 模拟hibernate的注解,创建数据表的源码地址:https://gitee.com/zbone/myanno 注解释义 java开发人员对注解,应该...

    Markxu 评论0 收藏0
  • Hibernate问题集锦

    摘要:查询照样写就行,如下参考问题七中关于多表连接查询和返回值集合中对象问题错误的查询语句释放分析原来是查询出来的字段并不能自动转换为对象。参考问题八原因原生的语句中返回值为,而语句中的返回值位型的,网上说的主要是兼容而做的。 首先奉上Hibernate3.2 API地址:http://docs.jboss.org/hiberna...Hibernate4.3 API地址:http://do...

    niceforbear 评论0 收藏0
  • Spring 异常单元测试

    摘要:新建计量单位类别测试保存这里我们调用了方法,但是并没有提示我们需要捕获异常,但是并不代表这个方法不抛出异常,可以抛出非检查的或其派生的异常。基础测试数据准备测试保存,期待抛出异常断言捕获异常为真运行测试,通过。 白盒测试 白盒测试,要求对代码中的每行代码至少覆盖一次。 @ApiModelProperty(学科类别) @ManyToOne // 设置学科类别字段不能为空 @JoinCol...

    tracymac7 评论0 收藏0
  • Spring Boot QuickStart (5) - Spring Data JPA

    摘要:关联关系的关联关系定义上,感觉并不是很灵活,姿势也比较难找。如,定义在关联关系上的参数可以设置级联的相关东西。因为序列化会涉及到实体类关联对象的获取,会触发所有的关联关系。 接(4) - Database 系列. Java Persistence API,可以理解就是 Java 一个持久化标准或规范,Spring Data JPA 是对它的实现。并且提供多个 JPA 厂商适配,如 Hi...

    sutaking 评论0 收藏0
  • Hibernate映射关系

    摘要:前言首先声明,这是一篇转发博客,不属于原创。关系映射有下面几种类型一对一外键关联映射单向一对一外键关联,使用,并设置了级联操作。设置了外键的名称为数据库字段名,如果不设置,则默认为另一类的属性名,外键的值是唯一的。 前言 首先声明,这是一篇转发博客,不属于原创。但是感觉很有用,所以在本人的博客中记录下来。 Hibernate Annotation关系映射有下面几种类型: 一对一...

    gougoujiang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<