6.JPA@ColumnのcolumnDefinition属性使用の詳細
8194 ワード
columnDefinitionプロパティの使用:
データベースDDL:
columnDefinitionでは、テーブルの作成時にSQL文を指定できます.たとえば、varcharの長さ128を一度に指定でき、空にすることはできません.もちろん、nullableとlengthプロパティを組み合わせて同じ結果を実現できます.
データベースDDL:
columnDefinitionプロパティの特殊な使用:プログラミング言語の文字列は一般的にStringで表されますが、データベースのvarcahr数値タイプには長さの制限があり、大きなテキストが必要になるとtext数値タイプが必要ですが、Stringタイプのデフォルトマッピングの数値タイプはvarcharで、columnDefinitionは追加指定できます.
データベースDDL:
remarkカラムの数値タイプはtextですが、NameとEmailのデフォルトはvarcahrです.
@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です.