我用Spring和Hibernate开发了我的Java应用程序,我有两个实体。
@Entity
@Table(name = "Users")
public class User {
private int idUser;
private String login;
private String password;
private List<Command> commands = new ArrayList<>();
public User() { }
public User( String login, String password ) {
super();
this.setLogin( login );
this.setPassword( password );
}
@Id
@Column(name = "USER_ID", unique = true, nullable = false, scale = 0)
public int getIdUser() {
return idUser;
}
@Column(name = "USER_LOGIN", nullable = false)
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
@Column(name = "USER_PASSWORD", nullable = false)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "utilisateur")
public List<Command> getCommands() {
return commands;
}
public String toString() {
return this.idUser + ": " + this.login + "/" + this.password
;
}
}
@Entity
@Table(name="Commands")
public class Command {
private int idCommand;
private User utilisateur;
private Date commandDate;
public Command() {}
public Command( User user, Date commandDate ) {
this.setUser( user );
this.setCommandDate( commandDate );
}
@Id
@Column(name = "CMD_Id", unique = true, nullable = false, scale = 0)
public int getIdCommand() {
return idCommand;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "USER_ID")
public User getUtilisateur() {
return user;
}
public void setUtilisateur(User user) {
this.user = user;
}
@Column(name = "CMD_DATE")
@Temporal(TemporalType.TIMESTAMP)
public Date getCommandDate() {
return commandDate;
}
public void setCommandDate(Date commandDate) {
this.commandDate = commandDate;
}
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append( "Commande de >> " ).append( this.user )
.append( " - " ).append( this.commandDate ).append( "\n" );
return builder.toString();
}
}
我创建我的服务类别,以获得Hibernate的结果
@Service
@Transactional
public class MyServiceImpl implements MyService {
private static final long serialVersionUID = 8393594103219622298L;
private static final String MY_REQUEST
="SELECT us.login, cd.date, us.password "+
" FROM user us , commande cd "+
" WHERE "+
" us.idUser = cd.user.idUser AND "+
" us.idUser = 1 ";
public List<Object> findUsersCmd() {
String query1 = MY_REQUEST;
SQLQuery queryObj = sessionFactory.getCurrentSession().createSQLQuery(query1);
List<Object> lstObj =queryObj.list();
return lstObj;
}
}
当我调试时,我在这一行中得到这个错误:
List<Object> lstObj =queryObj.list();
104165[http-bio-8080-exec-3]警告组织。冬眠util。JDBCExceptionReporter-SQL错误:904,SQLState:42000
104166[http-bio-8080-exec-3]错误组织。冬眠util。JDBCExceptionReporter-ORA-00904:“美国”。“IDUSER”:标识无效
我如何解决我的问题?
如果你想运行一个JPA查询,它应该看起来像这样:
private static final String MY_REQUEST =
"SELECT us.login, cd.date, us.password " +
"FROM User us JOIN us.commands cd " +
"WHERE us.idUser = 1";
并确保使用createQuery
:
List<Object[]> = sessionFactory.getCurrentSession().createQuery(MY_REQUEST)
.list();
createSQLQuery
用于运行本机SQL查询。在这种情况下,它看起来像:
private static final String MY_REQUEST =
"select us.USER_ID, cd.CMD_DATE, us.USER_PASSWORD " +
"from Users us JOIN ComaCommands cd ON us.USER_ID = cd.USER_ID " +
"where us.USER_ID = 1";
List<Object[]> = sessionFactory.getCurrentSession().createSQLQuery(MY_REQUEST)
.list();
但是您应该尽可能使用JPQL查询。
由于catalina.sh中的默认“java.endorsed.dirs”选项,无法用Java9启动基于tomcat的应用程序。 这方面有什么工作吗?
问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt
所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。
问题内容: 2014年11月29日更新- 这仍然是一个问题,Godaddy似乎不在乎也不会对此做任何事情。几个月前,Godaddy安全产品副总裁在这里发表了一篇博客文章,指出正在修复该问题,并提供了一种临时解决方法,但是到目前为止,没有任何变化。重要的是要注意,Godaddy的G2 CA服务器已经存在至少5年了,在那时,Godaddy尚未采取适当的步骤来解决此已知问题。提供的解决方法仅是一种解决方
问题内容: 我有一个这样的字符串:现在我想用实际的换行符替换\ n,这样它将变成 理发师 这是我的代码 但是它不起作用并且给我相同的字符串 问题答案: 您需要做: 该方法在其第一个参数中期望使用正则表达式。当在Java字符串中传递2时,您实际上传递了1。问题是,是一种逃避字符也正则表达式,因此正则表达式是actualy ,所以你需要把额外的两次。
列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。