【发布时间】:2021-07-12 02:09:44
【问题描述】:
我在 SQL Server 数据库中拥有近 30 列的表用户。我还为相应的数据库表创建了一个 JPA 实体。 JPA 实体如下所示:
@Entity
@Table(name="USER")
@Setter
@Getter
public class User{
@Id
@Column(name="ID",nullable=false)
private Integer id;
@Column(name="NAME")
private String name;
@Column(name="ADDRESS")
private String address;
@Column(name="FATHER_NAME")
private String fathersName;
}
现在我正在尝试创建一个本机查询,它只会从用户表中获取 id 和 name。 Repository 类看起来像这样。
@Repository
public interface UserDao extends JpaRepository<User,Integer>{
@Query(value=" SELECT u.ID,u.NAME from USER u", nativeQuery=true)
List<User> fetchUser();
}
现在当它被执行时,它会抛出一个异常,如下所示:
com.microsoft.sqlserver.jdbc.SqlServerException: The column name address is not valid
当我将地址列添加到我的查询中时,此异常会出现,但随后它会出现在另一个字段中。
com.microsoft.sqlserver.jdbc.SqlServerException: The column name father_name is not valid
所以,现在我想修改 JPA 实体,使该字段变为可选。 我试过使用 @Transient 但是如果其他一些查询正在使用这个地址字段,那么它会在那里显示为空。 我还尝试了以下所有注释:
- @Basic
- @NotFound(action=NotFoundAction.IGNORE)
- @Column(nullable="true")
- @JsonProperty
但是这些注释都不适合我。
【问题讨论】:
-
创建一个单独的类
UserNameView映射到同一个表(并且不包括@Setter)。 -
我们已经这样做了,而且效果很好。但是假设我必须编写 20 个不同类型的查询来为同一实体获取不同的列,然后我将不得不创建 20 个不同的类。所以我正在寻找某种方式,只要修改这个实体,所有查询都可以工作。
标签: java sql-server hibernate jpa