Hibernate 当一个字段有值时,另一个字段必须为空
我有一个名为Hibernate 当一个字段有值时,另一个字段必须为空,hibernate,Hibernate,我有一个名为Entity1的实体,该实体与其他两个实体Entity2和Entity3有两个多对一关系 每次向Entity1表中添加记录时,Entity1只能与Entity2或Entity3有关系 这是实体1的hbm文件: <class name="Entity1" table="t_entity1_e1" optimistic-lock="version"> <id name="id" column="e1_id"> <gen
Entity1
的实体,该实体与其他两个实体Entity2
和Entity3
有两个多对一关系
每次向Entity1
表中添加记录时,Entity1
只能与Entity2
或Entity3
有关系
这是实体1
的hbm文件:
<class name="Entity1" table="t_entity1_e1" optimistic-lock="version">
<id name="id" column="e1_id">
<generator class="native"/>
</id>
<property name="libelle" column="e1_libelle"/>
<many-to-one name="entity2" column="e1_entity2" class="Entity2"/>
<many-to-one name="entity3" column="e1_entity3" class="Entity3"/>
<many-to-one name="someOtherEntity" column="e1_other_entity" class="SomeOtherEntity"/>
</class>
所以我的意思是当列e1_entity2
有一个值时,另一列e1_entity1
必须为null,反之亦然
我该怎么做?在sql端和java端
PS:我没有使用JPA。您可以在Hibernate中实现这一点
约束定义:
@Target({ TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = { Entity1ConstraintValidator.class })
@Documented
public @interface Entity1Constraint {
String message() default "Error message";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
public class Entity1ConstraintValidator
implements ConstraintValidator<Entity1Constraint, Entity1> {
@Override
public void initialize(Entity1Constraint constraintAnnotation) {
}
@Override
public boolean isValid(Entity1 entity1, ConstraintValidatorContext context) {
if (entity1 == null) {
return true;
}
if ((entity1.getEntity2() != null) && (entity1.getEntity3()) != null)) {
return false;
}
return true;
}
}
@Target({TYPE,ANNOTATION\u TYPE})
@保留(运行时)
@约束(validatedBy={Entity1ConstraintValidator.class})
@记录
public@interface Entity1Constraint{
字符串消息()默认为“错误消息”;
类[]组()默认值{};
类可以在Hibernate中实现这一点
约束定义:
@Target({ TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = { Entity1ConstraintValidator.class })
@Documented
public @interface Entity1Constraint {
String message() default "Error message";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
public class Entity1ConstraintValidator
implements ConstraintValidator<Entity1Constraint, Entity1> {
@Override
public void initialize(Entity1Constraint constraintAnnotation) {
}
@Override
public boolean isValid(Entity1 entity1, ConstraintValidatorContext context) {
if (entity1 == null) {
return true;
}
if ((entity1.getEntity2() != null) && (entity1.getEntity3()) != null)) {
return false;
}
return true;
}
}
@Target({TYPE,ANNOTATION\u TYPE})
@保留(运行时)
@约束(validatedBy={Entity1ConstraintValidator.class})
@记录
public@interface Entity1Constraint{
字符串消息()默认为“错误消息”;
类[]组()默认值{};
等级