column

@Column(name="columnName";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; // decimal precision
int scale() default 0; // decimal scale

name 可选,字段名(默认值是属性名)
unique 可选,是否在该字段上设置唯一约束(默认值false)
nullable 可选,是否设置该字段的值可以为空(默认值false)
insertable 可选,该字段是否作为生成的insert语句中的一个字段(默认值true)
updatable 可选,该字段是否作为生成的update语句中的一个字段(默认值true)
columnDefinition 可选: 为这个特定字段覆盖sql DDL片段 (这可能导致无法在不同数据库间移植)
table 可选,定义对应的表(默认为主表)
length 可选,字段长度(默认值255)
precision 可选,字段数字精精度(默认值0),表示数字中的有效位,如果没有指定precision的话,Oracle将使用38作为精度。
scale 可选,如果字段数字刻度可用,表示数字小数点右边的位数,如果把scale设成负数,Oracle将把该数字取舍到小数点左边的指定位数。在此设置(默认值0)
例如:

@Column(columnDefinition="int default 0",nullable=false,insertable=false,updatable=false)
Integer enMenuVerTag;//英文菜品是否已经校验   //0:未校验   1:已校验
@Column(columnDefinition="varchar(255) default 'x'",nullable=false,insertable=false,updatable=false)
String enMenuVerId;//英文菜品校验人
@Temporal(TemporalType.TIMESTAMP)
@Column(columnDefinition="TIMESTAMPTZ   default '2009-01-01 00:00:00'",nullable=false,insertable=false,updatable=false)
Date enMenuVerTime;//英文菜品校验时间
@Column(name = "F_FileFuncType", columnDefinition = "char(1) default '' comment '文件类型:A建筑照片,B配电柜照片,C支路布置图,D部署方案'")
private char fileFuncType;
@Column(name = "F_FileDesc", nullable = true, columnDefinition = "varchar(80) default NULL comment '文件描述'")
private String fileDesc;
@Column(name = "F_FileSize", columnDefinition = "int default 0 comment '文件大小:单位byte'")
private int fileSize;
@Column(name = "F_FileDate", nullable = true, columnDefinition = "datetime  COMMENT '上传时间'")
private Date fileDate;
@Column(name = "F_BuildLong", nullable = true, columnDefinition = "numeric(18,4) DEFAULT 0 COMMENT '建筑坐标-经度,建筑任意点的经度读数(默认为东经,单位为度,如131.2576度)'")
private BigDecimal buildLong;
@Column(name = "F_IsStandard", nullable = true, columnDefinition = "bit DEFAULT  0  COMMENT'是否是标杆建筑,False–否, default  True–是'")
private boolean isStandard;

1.String映射为nvarchar

方法一:
Hibernate映射到数据库时,String类型被映射为了varchar
对于String类型,你可能是这样映射的

@Column(length = 20 , nullable = false , unique = true)  
private String name;  

查看数据库,你会发现name字段应该是这样 name varchar(20);
现在我们修改一下Annotation,让他映射为 name nvarchar(20)

@Column(length = 20 , nullable = false , unique = true , columnDefinition="nvarchar(20)")  
private String name;  

再查看数据库,你会发现现在应该是 name nvarchar(20);

注意:加上columnDefinition之后,length好像没有作用了,必须要在columnDefinition的value中指定长度。

@Column(nullable = false , unique = true , columnDefinition="nvarchar(20)")  
private String name; 

方法二:
继承SQLServerDialect ,写一个自己的,然后再xml中配置一下。
方法网址:http://stackoverflow.com/questions/1099413/how-can-hibernate-map-the-sql-data-type-nvarcharmax

public class SQLServerNativeDialect extends SQLServerDialect {  
     public SQLServerNativeDialect() {  
         super();  
         registerColumnType(Types.VARCHAR, "nvarchar($l)");  
         registerColumnType(Types.CLOB, "nvarchar(max)");  
}  

public String getTypeName(int code, int length, int precision, int scale) throws HibernateException {  
        if(code != 2005) {  
            return super.getTypeName(code, length, precision, scale);  
        } else {  
            return "ntext";  
        }  
    }  
}  

总结:
顺便查了一下columnDefinition,发现他可以设置默认值。Hibernate会把columnDefinition 的内容直接写在生成标的ddl中,因此语法必须正确。

@Column(columnDefinition="int default 0",nullable=false)  
columnDefinition
public abstract java.lang.String columnDefinition

(摘)可选: 为这个特定字段覆盖sql DDL片段 (这可能导致无法在不同数据库间移植)

2.update

XML中设置property 标签 update = “false” ,如下:我们设置 state 这个属性在更改中不做更改

<property name=”state” update=”false”></property>

如有几个字段不做更改,需在相应property,增加update=”false”

在Annotation中 在属性GET方法上加上

@Column(updatable=false)

我们在执行 update方法会发现,state 属性 不会被更改。
缺点:不灵活。如需要有多个字段指定不同的组合修改时不适用。

3.int float定义

可以使用@colum注解中的columnDefinition属性
float:

@Column(columnDefinition="number(10,2)")  
public float getPrice() {  
    return price;  
}

int:

@Column(columnDefinition="number(2) default 0")  
public int getSpecialPrice() {  
    return specialPrice;  
}  

4.bigdecimal

1)如果不指定number的长度,或指定长度n>18

   id number not null,转换为pojo类时,为java.math.BigDecimal类型

2)如果number的长度在10 <= n <= 18

   id number(n) not null,转换为pojo类时,为java.lang.Long类型

3)如果number的长度在1 <= n <= 9

   id number(n) not null,转换为pojo类时,为java.lang.Integer类型
相关推荐
<p> 欢迎参加英特尔® OpenVINO™工具套件初级课程 !本课程面向零基础学员,将从AI的基本概念开始,介绍人工智能与视觉应用的相关知识,并且帮助您快速理解英特尔® OpenVINO™工具套件的基本概念以及应用场景。整个课程包含了视频的处理,深度学习的相关知识,人工智能应用的推理加速,以及英特尔® OpenVINO™工具套件的Demo演示。通过本课程的学习,将帮助您快速上手计算机视觉的基本知识和英特尔® OpenVINO™ 工具套件的相关概念。 </p> <p> 为保证您顺利收听课程参与测试获取证书,还请您于<strong>电脑端</strong>进行课程收听学习! </p> <p> 为了便于您更好的学习本次课程,推荐您免费<strong>下载英特尔® OpenVINO™工具套件</strong>,下载地址:https://t.csdnimg.cn/yOf5 </p> <p> 收听课程并完成章节测试,可获得本课程<strong>专属定制证书</strong>,还可参与<strong>福利抽奖</strong>,活动详情:https://bss.csdn.net/m/topic/intel_openvino </p> <p> 8月1日-9月30日,学习完成【初级课程】的小伙伴,可以<span style="color:#FF0000;"><strong>免费学习【中级课程】</strong></span>,中级课程免费学习优惠券将在学完初级课程后的7个工作日内发送至您的账户,您可以在:<a href="https://i.csdn.net/#/wallet/coupon">https://i.csdn.net/#/wallet/coupon</a>查询优惠券情况,请大家报名初级课程后尽快学习哦~ </p> <p> <span style="font-size:12px;">请注意:点击报名即表示您确认您已年满18周岁,并且同意CSDN基于商务需求收集并使用您的个人信息,用于注册OpenVINO™工具套件及其课程。CSDN和英特尔会为您定制最新的科学技术和行业信息,将通过邮件或者短信的形式推送给您,您也可以随时取消订阅不再从CSDN或Intel接收此类信息。 查看更多详细信息请点击CSDN“<a href="https://passport.csdn.net/service">用户服务协议</a>”,英特尔“<a href="https://www.intel.cn/content/www/cn/zh/privacy/intel-privacy-notice.html?_ga=2.83783126.1562103805.1560759984-1414337906.1552367839&elq_cid=1761146&erpm_id=7141654/privacy/us/en/">隐私声明</a>”和“<a href="https://www.intel.cn/content/www/cn/zh/legal/terms-of-use.html?_ga=2.84823001.1188745750.1560759986-1414337906.1552367839&elq_cid=1761146&erpm_id=7141654/privacy/us/en/">使用条款</a>”。</span> </p> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页