我认为hibernate只考虑带注释的类变量@Column.但奇怪的是,今天当我添加一个变量(没有映射到任何列,只是我在类中需要的变量)时,它试图将该变量作为列名包含在select语句中并抛出错误 -
'字段列表'中的未知列'team1_.agencyName'
我的课 -
@Entity
@Table(name="team")
public class Team extends BaseObject implements Serializable {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(length=50)
private String name;
@Column(length=10)
private String code;
@Column(name = "agency_id")
private Long agencyId;
private String agencyName; //note: not annotated.
}
Run Code Online (Sandbox Code Playgroud)
仅供参考...我在另一个具有多对多映射的类中使用上面的类
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name="user_team",
joinColumns = { @JoinColumn( name="user_id") },
inverseJoinColumns = @JoinColumn( name="team_id")
)
public Set<Team> getTeams() {
return teams;
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?!
目前我正在学习Spring框架,主要关注它的安全模块.我已经看过一些与注册和登录相关的指南.我在User类的密码字段中看到了transient关键字或@Transient注释的常见用法.
我的虚拟应用程序使用Spring Boot + Spring MVC + Spring Security + MySQL.
我知道
Java的transient关键字用于表示字段不是序列化的.
JPA的@Transient注释 ......
...指定属性或字段不是持久的.它用于注释实体类,映射的超类或可嵌入类的属性或字段.
和org.springframework.data.annotation的@Transient批注...
将字段标记为映射框架的瞬态字段.因此,该属性将不会被持久化,也不会被映射框架进一步检查.
在我的MySQL数据库中,我有spring_demo模式,它有3个表:
+-----------------------+
| Tables_in_spring_demo |
+-----------------------+
| role |
| user |
| user_role |
+-----------------------+
Run Code Online (Sandbox Code Playgroud)
当我在User类的密码字段中使用transient关键字时,它不会存储在MySQL数据库中.(例如:test01)
mysql> select * from user;
+----+--------+------------------+----------+
| id | active | email | username |
+----+--------+------------------+----------+
| 1 | 1 | test01@gmail.com | test01 |
+----+--------+------------------+----------+ …Run Code Online (Sandbox Code Playgroud) jpa spring-security transient spring-annotations spring-data
我正在使用Hibernate与MySQL进行映射
我有一个实体类,我在其中使用MySQL中的列映射方法
现在的问题是,如果可能,我不要在类与SQL任何列映射的一些方法,好像我尽量不映射我的实体类的方法之一,它提供了异常.
这是代码片段
@Column(name="skills")
public String getSkills() {
return skills;
}
public int getRowCount() {
return rowCount;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我已经在SQL中为getSkills分配了列技能,但我不想getRowCount() 在MySQL中分配任何列.
我怎么能实现这一点(如上所述,它给出例外,rowCount是未知的)?
我正在尝试使用 javax.persistence.* 通过使用 @Entity 自动创建表。这是一些问题。无论如何,是否可以使用注释将 JsonNode 转换为字符串。
编辑:Jpa是Spring-Data-Jpa,JsonNode是fasterxml.jackson
我的问题是,我可以在JPA实体中使用静态记录器,还是会导致一些问题?我想做这样的事情(记录器是log4j):
@Entity
public class AlertRule implements Serializable {
/**
* Serial version ID.
*/
private static final long serialVersionUID = 9000392523924653431L;
/**Logger. */
transient private static final Logger LOGGER = Logger.getLogger(AlertRule.class);
/**
* ID.
*/
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
/**
* Rule name.
*/
@NotNull
private String name;
...
Run Code Online (Sandbox Code Playgroud)