繁体   English   中英

Spring data cassandra:在类 User 上找不到要绑定构造函数的属性构建器

[英]Spring data cassandra: No property builder found on class User to bind constructor to

我开始了一个基本的 Spring 项目。 我使用 Spring 数据 Cassandra。

我的模型使用构建器模式。 这是我的用户类:

@Table("user")
@JsonDeserialize(builder = User.Builder.class)
public class User {

@PrimaryKey
public final String username;
@Column("password")
public final String password;
@Column("firstname")
public final String firstName;
@Column("lastname")
public final String lastName;
@Column("birthdate")
public final Date birthDay;
@Column("emailaddress")
public final String emailAddress;
@Column("organization")
public final String organization;
@Column("locality")
public final String locality;
@Column("stateprovince")
public final String stateProvince;
@Column("countrycode")
public final String countryCode;
@Column("disabled")
public final boolean disabled;
@Column("registrationdate")
public final Date registrationDate;

private User(Builder builder) {
    username = builder.username;
    password = builder.password;
    firstName = builder.firstName;
    lastName = builder.lastName;
    birthDay = builder.birthDay;
    emailAddress = builder.emailAddress;
    organization = builder.organization;
    locality = builder.locality;
    stateProvince = builder.stateProvince;
    countryCode = builder.countryCode;
    disabled = builder.disabled;
    registrationDate = builder.registrationDate;
}

public static Builder newBuilder() {
    return new Builder();
}

public static Builder newBuilder(User copy) {
    Builder builder = new Builder();
    builder.username = copy.username;
    builder.password = copy.password;
    builder.firstName = copy.firstName;
    builder.lastName = copy.lastName;
    builder.birthDay = copy.birthDay;
    builder.emailAddress = copy.emailAddress;
    builder.organization = copy.organization;
    builder.locality = copy.locality;
    builder.stateProvince = copy.stateProvince;
    builder.countryCode = copy.countryCode;
    builder.disabled = copy.disabled;
    builder.registrationDate = copy.registrationDate;
    return builder;
}

public static final class Builder {
    private String username;
    private String password;
    private String firstName;
    private String lastName;
    private Date birthDay;
    private String emailAddress;
    private String organization;
    private String locality;
    private String stateProvince;
    private String countryCode;
    private boolean disabled;
    private Date registrationDate;

    private Builder() {
    }

    public static Builder newStub() {
        return new Builder()
                .withUsername("stub")
                .withEmailAddress("stub@unittest.com")
                .withPassword("dontforgettests")
                .withCountryCode("9")
                .withFirstName("Someone")
                .withLastName("Overarainbow");
    }

    public Builder withUsername(String val) {
        username = val;
        return this;
    }
     //etc
}

我在控制器端将 json 从 POST 请求序列化到 User 对象没有问题。 当我调用 repo 来保存对象时也没有问题,但是当我这样做时:

User getByUsername(String username);

然后我收到以下错误:没有在实体类 com.project.model.user.User 上找到属性构建器来绑定构造函数参数

我该如何解决这个问题?

要创建 Spring Data 实体,必须在 POJO 中编写一些必需元素,您应该拥有完整的参数构造函数、getter 和 setter。 此外,不要犹豫,添加默认构造函数并使用 equals 和 hashCode 方法覆盖 toString。 这是使用 Spring Data Cassandra 术语的实体类示例:

@Table
public class Person {

  @PrimaryKey
  private final String id;

  private final String name;
  private final int age;

  public Person(String id, String name, int age) {
    this.id = id;
    this.name = name;
    this.age = age;
  }

  public String getId() {
    return id;
  }

  public String getName() {
    return name;
  }

  public int getAge() {
    return age;
  }

  @Override
  public String toString() {
    return String.format("{ @type = %1$s, id = %2$s, name = %3$s, age = %4$d }",
      getClass().getName(), getId(), getName(), getAge());
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM