Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jpa限制数字列的长度_Java_Oracle_Jpa - Fatal编程技术网

Java 使用jpa限制数字列的长度

Java 使用jpa限制数字列的长度,java,oracle,jpa,Java,Oracle,Jpa,我想在oracle中生成一列(abc编号(2))(目前): @Column(length = 2) private Integer abc; 但在Oracle中,创建的列仍然是abc NUMBER(10,0) 我尝试了@位(整数=2,分数=0),但我认为这不起作用,因为Java类型是integer Java doc for说: 带注释的元素必须是支持的可接受范围内的数字 类型包括: BigDecimal BigInteger String byte, short, int, long, and

我想在oracle中生成一列(
abc编号(2)
)(目前):

@Column(length = 2)
private Integer abc;
但在Oracle中,创建的列仍然是abc NUMBER(10,0)

我尝试了
@位(整数=2,分数=0)
,但我认为这不起作用,因为Java类型是
integer

Java doc for说:

带注释的元素必须是支持的可接受范围内的数字 类型包括:

BigDecimal
BigInteger
String
byte, short, int, long, and their respective wrapper types
空元素被认为是有效的

但是
@位(整数=2,分数=0)
对生成的列没有影响


我正在寻找一个通用的解决方案,它也可以在MySQL上工作。

您可以尝试通过java sql数据类型映射获得的精度

@Column
private Short weightedScore;
还可以尝试
BigDecimal
指定
precision
scale

@Column(precision = 2, scale = 0)
private BigDecimal weightedScore;
IMHO BigDecimal与Oracle的映射非常好
数字(精度)

使用
精度属性,即

@Column(precision=2)
private Integer abc;
我希望它生成一些DDL,比如
NUMBER(2,0)


但我认为mysql没有编号。因此,这可能仅限于oracle。在你提到的问题中没有任何地方
MySQL
@MohammadFaisalSo可能使用
@列(精度=2)
。答案已更新仅当使用十进制列时,“精度”属性才适用。正如您在答案中添加的链接中所述。但是使用
@数字(整数=5,分数=2)
BigDecimal
有效,生成的列是
NUMBER(7,2)
。我可以考虑<代码>短<代码>。我还需要更改其他内容吗?数字注释仅用于验证数据,当值与定义的值不匹配时,需要验证器实现抛出异常。它与JPA关系不大,与数据库中的DDL生成无关。如果要查找数据库中的特定类型,则必须使用columnDefinition自己定义它。如果它不能在不同的数据库平台上工作,那么您就被卡住了——您必须在orm.xml中用数据库的细节覆盖它。