6.JPA@ColumnのcolumnDefinition属性使用の詳細

8194 ワード

columnDefinitionプロパティの使用:
@Table(name = "CUSTOMERS")
@Entity
public class Customer {
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Integer id;
    @Column(name = "Name")
    private String name;
    @Column(name = "Email",columnDefinition="varchar(128) not null")
    private String email;
    @Column(name = "Age")
    private int age;
    ......
}

データベースDDL:
CREATE TABLE `customers` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Age` int(11) DEFAULT NULL, `Email` varchar(128) NOT NULL, `Name` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

columnDefinitionでは、テーブルの作成時にSQL文を指定できます.たとえば、varcharの長さ128を一度に指定でき、空にすることはできません.もちろん、nullableとlengthプロパティを組み合わせて同じ結果を実現できます.
@Table(name = "CUSTOMERS")
@Entity
public class Customer {
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Integer id;
    @Column(name = "Name")
    private String name;
    @Column(name = "Email", nullable = true, length = 128)
    private String email;
    @Column(name = "Age")
    private int age;
    ......
}

データベースDDL:
CREATE TABLE `customers` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Age` int(11) DEFAULT NULL, `Email` varchar(128) DEFAULT NULL, `Name` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

columnDefinitionプロパティの特殊な使用:プログラミング言語の文字列は一般的にStringで表されますが、データベースのvarcahr数値タイプには長さの制限があり、大きなテキストが必要になるとtext数値タイプが必要ですが、Stringタイプのデフォルトマッピングの数値タイプはvarcharで、columnDefinitionは追加指定できます.
@Table(name = "CUSTOMERS")
@Entity
public class Customer {
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Integer id;
    @Column(name = "Name")
    private String name;
    @Column(name = "Email", nullable = true, length = 128)
    private String email;
    @Column(name = "Age")
    private int age;
    @Column(name = "Remark",columnDefinition="text")
    private String remark;
    ......
}

データベースDDL:
CREATE TABLE `customers` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Age` int(11) DEFAULT NULL, `Email` varchar(128) DEFAULT NULL, `Name` varchar(255) DEFAULT NULL, `Remark` text, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

remarkカラムの数値タイプはtextですが、NameとEmailのデフォルトはvarcahrです.