现在我开发了一个多租户系统,使用带JPA和hibernate的spring-boot。
当我想要保存一个集合时有一些问题。
在代码中,有一个JSR 223 Sampler
班级'帐户'在embeddable
班级,有一个Tenant
租户
Set<Account>
帐户
@Entity
@Table(name = "tenant",
uniqueConstraints = @UniqueConstraint(columnNames = "tenant_id"))
public class Tenant extends ConcurrentSafeEntity<Tenant, TenantId> {
private static final long serialVersionUID = 6910165036330125453L;
@EmbeddedId
private TenantId tenantId;
@Column(length = 20, nullable = false)
private String name;
@ElementCollection
@CollectionTable(name = "tenant_account")
private Set<Account> accounts;
...
}
账户号码
@Embeddable
public class Account implements ValueObject<Account> {
private static final long serialVersionUID = -2780296854441642870L;
@Embedded
private AccountNumber accountNumber;
@Embedded
private EncryptedPassword password;
...
}
但是当我通过
进行测试时@Embeddable
public class AccountNumber implements ValueObject<AccountNumber> {
private static final long serialVersionUID = -2737145407283086518L;
@Column(name = "account_number", nullable = false, updatable = false)
private String source;
@Column(name = "type", nullable = false, updatable = false)
private String type;
...
}
错误是
@Test
public void constructor() throws Exception {
Tenant tenant = new Tenant(
tenantRepository.nextIdentity(), "AName",
new AccountNumber("test@wcscent.com", "email"),
new EncryptedPassword("aPassword", encryptionService),
validator
);
tenantRepository.save(tenant);
}
对于JPA和hibernate,我还是比较陌生。那么,你能告诉我,我有什么问题吗?
谢谢!
答案 0 :(得分:1)
好的,我通过跟踪hibernate代码来解决问题。而这只是因为我的代码不是标准的POJO。
这意味着类的属性可能没有getter或setter。所以hibernate找不到它们。
但我认为这可能是一个错误。因为这种情况恰好发生在AccountNumber
和EncryptedPassword
。它们属于Account
。
换句话说,如果属性属于Tenant
或Account
,则hibernate可以找到它们,即使它们没有getter和setter。但是如果属性属于AccountNumber
和EncryptedPassword
,那么当hibernate没有getter和setter时,它们就找不到它们。