gpt4 book ai didi

java - @Column 或 @Basic JPA 注释在 spring-data-jpa 模式创建中被忽略

转载 作者:行者123 更新时间:2023-11-29 10:15:05 25 4
gpt4 key购买 nike

我对我期望开箱即用的东西感到非常困惑。所以要么我做的事情完全错误,要么这只是一个误解。

我正在尝试在 JPA 实体类中使用 getter/setter 注释。我坚持使用我在 JPA wiki (s. http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes#Conversion) 上找到的示例。该示例如下所示:

    @Entity
public class Employee {
...
private boolean isActive;
...
@Transient
public boolean getIsActive() {
return isActive;
}
public void setIsActive(boolean isActive) {
this.isActive = isActive;
}
@Basic
private String getIsActiveValue() {
if (isActive) {
return "T";
} else {
return "F";
}
}
private void setIsActiveValue(String isActive) {
this.isActive = "T".equals(isActive);
}
}

我采用了我能找到的最清晰、最干净的 spring-data-jpa 示例:http://spring.io/guides/gs/accessing-data-jpa/ .

我从 git 中检查出来并将他们的示例实体类(s. https://github.com/spring-guides/gs-accessing-data-jpa/blob/master/complete/src/main/java/hello/Customer.java)更改为如下所示:

@Entity
public class Customer {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String firstName;
private String lastName;

protected Customer() {}

public Customer(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

@Override
public String toString() {
return String.format(
"Customer[id=%d, firstName='%s', lastName='%s']",
id, firstName, lastName);
}

@Transient
private boolean isActive;

@Transient
public boolean getIsActive() {
return isActive;
}
public void setIsActive(boolean isActive) {
this.isActive = isActive;
}

@Column
private String getIsActiveValue() {
if (isActive) {
return "T";
} else {
return "F";
}
}
private void setIsActiveValue(String isActive) {
this.isActive = "T".equals(isActive);
}

}

现在什么都没有改变。不会创建相应的字符串字段。创建数据库表的日志中的行仍然如下所示:

17:11:10.540 [main] DEBUG o.h.tool.hbm2ddl.SchemaUpdate - create table Customer (id bigint generated by default as identity, firstName varchar(255), lastName varchar(255), primary key (id))

我完全不知道这可能是什么原因。我找不到 spring-data-jpa 不允许对 getter 进行注释的文档。

非常非常感谢任何帮助!

最佳答案

我认为您只是混合了注解:您必须注解字段或 getter,但不能同时注解两者。一旦决定注释 ID 字段,就必须注释所有字段(而不是 getter),反之亦然:如果注释了 getId() 方法,则必须注释所有方法。

关于java - @Column 或 @Basic JPA 注释在 spring-data-jpa 模式创建中被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20101448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com