私はこのような実体を持って:あなたはそれは大丈夫だ、BICと研究所、空のIBANを提供することができ、」カスタム検証を行うためにカスタムJPA検証
@Entity
@Table(name = "transaction_receiver")
public class TransactionReceiver implements Serializable, Addressable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
@Column(name = "contact_id", nullable = false)
private String contactId;
@Column(name = "datev_number")
private String datevNumber;
@NotNull
@Column(name = "receiver", nullable = false)
private String receiver;
@NotNull
@Size(min = 22, max = 34)
@Column(name = "iban", length = 34, nullable = false)
private String iban;
@Size(min = 8, max = 11)
@Column(name = "bic", length = 11, nullable = false)
private String bic;
@NotNull
@Column(name = "institute")
private String institute;
@Column(name = "company")
private String company;
、タスク、しかし、もしあれば。上記のconstraitは保持する必要があります "
私はこれを達成するための最もエレガントな方法を探しています。私は何とか汚いどう思うかが、作業 - -
私の現在のソリューションは、@PrePersistステートメントを使用して注釈を@Validが賢明ではありません
@PrePersist
public void checkBankData() {
boolean ibanEmpty = iban == null || iban.isEmpty();
boolean ibanValid = !ibanEmpty && iban.length() >= 22 && iban.length() <= 34;
boolean bicEmpty = bic == null || bic.isEmpty();
boolean bicValid = !bicEmpty && bic.length() >= 8 && bic.length() <= 11;
boolean instituteEmpty = institute == null || institute.isEmpty();
boolean validState = (ibanEmpty && bicEmpty && instituteEmpty) || ibanValid && bicValid;
if (!validState) {
throw new IllegalStateException(
String.format(
"bank data is not empty and %s%s%s%s%s",
!ibanValid ? "iban has to be from 22 to 34 chars long" : "",
!ibanValid && !bicValid ? "and" : "",
!bicValid ? "bic has to be from 8 to 11 chars long" : "",
!ibanValid && !bicValid && instituteEmpty ? "and" : "",
instituteEmpty ? "institue must not be empty" : ""
)
);
}
}
そこから例外をスローします。他のアプローチは、ここで説明したようなカスタムバリデーターを定義することです:http://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/validator-customconstraints.html
しかし、これは本当に私の制約のための過剰なもののように見えます。
他に優雅な方法はありませんか?あなたはそれがより大きいかまたは特定の数よりも小さくなければなりません指定する@sizeアノテーションを使用して試みることができるHibernateバリの@NotEmptyと同等のものを持っていないデフォルトのJPAの検証を回避する
おかげ