13

Model クラスで変数を String として定義すると、DB では 'VARCHAR(255)' として変換されます。

ただし、このデータは数段落からなる非常に長いテキストであるため、255 以上を保存したいと考えています。

私が覚えている限り、DB には非常に長いテキストを保存するための TEXT タイプがあります。

Play で TEXT タイプを定義するにはどうすればよいですか? フレームワーク?

Play で定義されている Constraints.MaxLength と Constraints.Max を試してみました! フレームワーク API。

ただし、まだ 1.sql ファイル (Ebean DDL によって自動的に作成される) は、この変数を VARCHAR(255) として定義します。

前もって感謝します!

4

2 に答える 2

22

モデルでは、次のように設定された列定義を使用するだけTEXTです:

@Entity
public class MyEntity extends Model {

    @Id
    private Long id;

    @Column(columnDefinition = "TEXT")
    private String aLongText;
    ....

}

すでに Postgres で使用していますが、他のデータベース サーバーで問題ないかどうかはわかりません。

于 2012-09-10T06:58:28.130 に答える
9

@Lobフィールドにアノテーションを使用するlongtextと、MySQLでタイプが生成textされ、PostgreSQLでタイプが生成されます。

package models;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;

@Entity
public class Foo {

    @Id
    public Long id;

    @Lob
    public String bar;

}

MySQLでは、これにより次の結果が得られます。

mysql> describe foo;
+-------+------------+------+-----+---------+----------------+
| Field | Type       | Null | Key | Default | Extra          |
+-------+------------+------+-----+---------+----------------+
| id    | bigint(20) | NO   | PRI | NULL    | auto_increment |
| bar   | longtext   | YES  |     | NULL    |                |
+-------+------------+------+-----+---------+----------------+
2 rows in set (0.00 sec) 

PostgreSQLでは、これにより次の結果が得られます。

foodb=> \d foo;
     Table "public.foo"
 Column |  Type  | Modifiers
--------+--------+-----------
 id     | bigint | not null
 bar    | text   |
Indexes:
    "pk_foo" PRIMARY KEY, btree (id)

Java EE apiによると:

Lobタイプは、永続フィールドまたはプロパティのタイプから推測されます

つまり、タイプのフィールドはStringテキストブロブを提供し、タイプのフィールドはbyte[]バイナリブロブを提供する必要があります。

于 2012-10-01T08:30:51.523 に答える