Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在Hibernate中为我正在使用的where子句的外键列编写更新查询?_Mysql_Database_Hibernate - Fatal编程技术网

Mysql 如何在Hibernate中为我正在使用的where子句的外键列编写更新查询?

Mysql 如何在Hibernate中为我正在使用的where子句的外键列编写更新查询?,mysql,database,hibernate,Mysql,Database,Hibernate,当我在hibernate中编写更新查询时。我得到了这个错误。我在MySQL 5.0中使用Hibernate 3.2。在UserDetails.java中,Login是引用Login.java主键(loginId)的forign键 java.lang.NullPointerException at org.hibernate.hql.ast.util.SessionFactoryHelper.findSQLFunction(SessionFactoryHelper.java:342)

当我在hibernate中编写更新查询时。我得到了这个错误。我在MySQL 5.0中使用Hibernate 3.2。在UserDetails.java中,Login是引用Login.java主键(loginId)的forign键

java.lang.NullPointerException
    at org.hibernate.hql.ast.util.SessionFactoryHelper.findSQLFunction(SessionFactoryHelper.java:342)
    at org.hibernate.hql.ast.tree.IdentNode.getDataType(IdentNode.java:266)
    at org.hibernate.hql.ast.tree.BinaryLogicOperatorNode.extractDataType(BinaryLogicOperatorNode.java:168)
    at org.hibernate.hql.ast.tree.BinaryLogicOperatorNode.initialize(BinaryLogicOperatorNode.java:34)
    at org.hibernate.hql.ast.HqlSqlWalker.prepareLogicOperator(HqlSqlWalker.java:1007)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3992)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1762)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:776)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.updateStatement(HqlSqlBaseWalker.java:358)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:237)
    at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
下面是UserDetails.java pojo类

private Long udid;
private Login login;
private String name;
private String secEmailId;
private Date dob;
private String gender;
private long createrId;
private Date createdDate;
private long updaterId;
private Date updatedDate;
settes & getters

您的实体中只有登录对象。调用外键必须是(整数或int)才能放入HQL。并且不能将外键作为login.getId()调用,因为hibernate不允许在HQL中使用括号。使用Integer的目的是将其设置为null

private Login login;
您必须引用您的实体,但不想从数据库中加载它,而只是为了获取外键,请使用这种方法。但您需要在@Column属性中添加“insertable”=false和“updateable”=false,以防止丢失对实体的正确引用。也许,这是您的UserDetails类

@Entity
public class UserDetails {

    //Other attributes, id, phNo, address, etc..

    @Column(name = "full_name")
    private String name;

    @OneToMany(cascade = CascadeType.ALL) //Relationship is up to you.
    @JoinColumn(name = "login_id")
    private Login login; //This is object.

    @Column(name = "login_id", insertable = false, updatable = false)
    private Integer fkLoginId; //Here is your foreign key.

    //getter and setters.
}
这不会在数据库中生成另一列,因为它无法插入或更新,并且只引用了一列。之后,您将fkLoginId作为外键,并使用HQL更新您的UserDetails,如下所示

String name = "Updated Name";
int id = 1;

session = HibernateUtil.getSession(); //Consider declared
transaction = session.beginTransaction();
Login login = (Login) session.get(Login.class, loginId);
String hql = "update UserDetails set name=:Name where fkLoginId=:Id"; //<---Ans
Query query = session.createQuery(hql);
query.setParameter("Name", name);
query.setParameter("Id", id);
int result = query.executeUpdate();
transaction.commit();
session.close();
String name=“更新的名称”;
int-id=1;
session=HibernateUtil.getSession()//考虑声明
事务=session.beginTransaction();
Login Login=(Login)session.get(Login.class,loginId);

String hql=“update UserDetails set name=:name,其中fkLoginId=:Id”//有什么帮助吗?
String name = "Updated Name";
int id = 1;

session = HibernateUtil.getSession(); //Consider declared
transaction = session.beginTransaction();
Login login = (Login) session.get(Login.class, loginId);
String hql = "update UserDetails set name=:Name where fkLoginId=:Id"; //<---Ans
Query query = session.createQuery(hql);
query.setParameter("Name", name);
query.setParameter("Id", id);
int result = query.executeUpdate();
transaction.commit();
session.close();