/**
* @Column注解一共有10个属性,这10个均为可选属性,各属性含义分别如下:
* 1.name
* name属性定义了被标注字段在数据库表中所对应字段的名称;
* 2.unique
* unique属性表示该字段是否为唯一标识,默认为false。如果表中有一个字段需要唯一标识,
* 则既可以使用该标记,也可以使用@Table标记中的@UniqueConstraint。
* 3.nullable
* nullable属性表示该字段是否可以为null值,默认为true。
* 4.insertable
* insertable属性表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。
* 5.updatable
* updatable属性表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。insertable
* 和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。
* 6.columnDefinition
* columnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义
* 时使用。(也就是说,如果DB中表已经建好,该属性没有必要使用。)
* 7.table
* table属性定义了包含当前字段的表名。
* 8.length
* length属性表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。
* 9.precision和scale
* precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,
* scale表示小数点所占的位数。
*示例一:指定字段“contact_name”的长度是“512”,并且值不能为null。
* @Column(name="contact_name",nullable=false,length=512)
* private String name;
* 示例二:指定字段“monthly_income”月收入的类型为double型,精度为12位,小数点位数为2位。
* @Column(name="monthly_income",precision=12, scale=2)
* private BigDecimal getMonthlyIncome;
* 示例三:自定义生成CLOB类型字段的SQL语句。
* @Column(name=" contact_name ",columnDefinition="clob not null")
* private String name;
*示例四:字段值为只读的,不允许插入和修改。通常用于主键和外键。
* @Column(name="id",insertable=false,updatable=false)
* private Integer id;
*/
public void generateSql(){
// 创建建表SQL
Map<String, String> settings = new HashMap<>();
settings.put("connection.driver_class", "oracle.jdbc.OracleDriver");
settings.put("dialect", "org.hibernate.dialect.OracleDialect");
settings.put("hibernate.connection.url", "jdbc:oracle:thin:@*:3306:XE");
settings.put("hibernate.connection.username", "*");
settings.put("hibernate.connection.password", "*");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(settings).build();
MetadataSources metadataSources = new MetadataSources(serviceRegistry);
// *************************************
metadataSources.addAnnotatedClass(NewTable.class);
// *************************************
Metadata metadata = metadataSources.buildMetadata();
SchemaExport schemaExport = new SchemaExport();
schemaExport.setFormat(true);
schemaExport.setDelimiter(";");
schemaExport.setOutputFile("create.sql");
schemaExport.createOnly(EnumSet.of(TargetType.SCRIPT), metadata);
}