Java 使用jpa限制数字列的长度
我想在oracle中生成一列(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
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中用数据库的细节覆盖它。