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{
字符串消息()默认为“错误消息”;
类[]组()默认值{};
等级