Javaの計算値をデータベースに格納することはできません。Ebean:プロパティを持たないゲッターの列を作成する方法
たとえば、firstName
とlastName
のPersonクラスがあるとします。実際のプロパティではなく、Person
の名前の長さを返すgetterが必要な場合があります。
@Entity
public class Person extends Model {
@Id
public Long id;
public String firstName;
public String lastName;
public Int getNameLength() {
return firstName.length() + lastName.length();
}
public Person (String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
私はそうのような新しいPerson
を作成するのであれば:
Person bob = new Person("Bob", "Roy");
bob.save();
その後、我々はテーブルにこれで終わる必要がありますに:これが可能であれば
| id | first_name | last_name | name_length |
====================================================
| 1 | "Bob" | "Roy" | 6 |
誰でも知っていますか? Old Gods and the New Godsのため
私は通常のフォームをよく覚えています。私はあなたに同意します。しかし時には要件が出てくる。クライアントはデータベース内のフィールドを必要としますが、データベースによってフィールドが計算された値にならないようにします。これはパフォーマンス上の理由によるものです。 これは実際のユースケースではないため、長さは機能しません。これらのフィールドを計算するためのルールはかなり複雑で存在し、Javaコードで使用されています。 SQLを使用してレポートを生成するときにはこれらをフィールドとして必要とし、一連のSQLビューでビジネスロジックを複製しないことが望ましいでしょう。 – ncphillips
私はあなたのポイントを見ます。私はまだこのアイデアが気に入らないが、私はこの作業を行うための方法で自分の答えを更新した。私の前提は、Ebeanを使用するときにプロパティを定義する必要があるということです。これはHibernateのプロパティなしで動作するはずです。 – Anton
あなたのコメントを受け入れました。名前の長さのゲッターが手作業で値を計算していたという事実が私を捨てました。 – ncphillips