【问题标题】:How to validate fields of own fields in JSF?如何验证JSF中自己字段的字段?
【发布时间】:2026-02-13 01:30:02
【问题描述】:

听起来很奇怪。但我需要在个人实体中验证公司的字段地址。 Company 是 Person 字段,Addres 是 Company 字段。

我想验证 Company in Person 实体的地址。

为什么?因为如果我之前不在 Person 实体中使用,公司应该有一个地址?

我怎样才能实现这个验证??

@Entity
@Table(schema = Constants.DB_SCHEMA)
public class Person{
   Company company;

  // Validation of the address should come here ???
    public Company getCompany() {
        return company;
    }
}

@Entity
@Table(schema = Constants.DB_SCHEMA)
public class Company{
   String address;
}

【问题讨论】:

    标签: java validation jsf java-ee-6 bean-validation


    【解决方案1】:

    基本上,您可以使用 Company 类的地址属性上的注释 @NotNull 来做到这一点。

    但是:您当前的代码无论如何都不会工作,因为您没有指定类之间的关系并且您没有主键....

    这是一个如何工作的示例:

    @Entity
    public class Person {
    
        @Id
        @GeneratedValue
        private Long id;
    
        @OneToOne(cascade= CascadeType.ALL)
        private Company company;
    
        public Company getCompany() {
            return company;
        }
    
        public void setCompany(Company company) {
            this.company = company;
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }    
    }
    

    @Entity
    public class Company {
    
        @Id
        @GeneratedValue
        private Long id;
    
        @NotNull
        private String adress;
    
        public String getAdress() {
            return adress;
        }
    
        public void setAdress(String adress) {
            this.adress = adress;
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    }
    

    【讨论】:

    • 如果 Person 是聚合根,您应该在 Person 类的 company 属性上添加“@Valid”。否则 Company 类没有得到验证。