我正在使用
hibernate-jpa-2.0-api-1.0.1.Final jar
hibernate-commons-annotations-4.0.4.Final
hibernate-core-4.2.5.Final
我的实体类公司和分支机构:
@Entity
@Table(name = "company")
public class Company {
@Id
@Column(name = "ID") @GeneratedValue
private Integer id;
@OneToMany(mappedBy="company",cascade = CascadeType.ALL)
@Fetch(FetchMode.SELECT)
private Set<Branch> branchs;
}
@Entity
@Table(name = "branch")
public class Branch {
@Id @Column(name = "ID") @GeneratedValue
private Integer id;
@LazyCollection(LazyCollectionOption.FALSE)
@ManyToOne
@JoinColumn(name = "company_id")
private Company company;
}
我在HQL中执行时遇到错误
session.createQuery(“从公司选择新公司(id,名称,分支)作为公司”)。list()
我在公司公司(id,name,branchs)有构造函数
错误是:
2013-12-06 16:28:02 WARN SqlExceptionHelper:145 - SQL错误:1064,SQLState:42000 2013-12-06 16:28:02错误SqlExceptionHelper:147 - 您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在公司company0_ inner join branch branchs1_ on company0_.ID = b'第1行附近使用“as col_2_0_”附近的正确语法
答案 0 :(得分:0)
您检查过hibernate.dialect属性吗?您是否为MySql配置了它。
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
答案 1 :(得分:0)
如果要从Company表中选择所有记录,则可以使用以下HQL
Query query = session.getCurrentSession().createQuery("FROM Company AS c");
query.list();
或者如果你想添加一些条件,那么你的HQL应该是这样的
Query query = session.getCurrentSession().createQuery("SELECT c.id, c.name, c.branchs FROM Company AS c WHERE c.id = :id AND c.branchs = :branchs");
query.setParameter("id", 123);
query.setParameter("branchs", "abc");
query.list();
答案 2 :(得分:0)
也许您可以尝试以下注释:
我认为公司是数据的所有者:
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn (name = "ID")
private Set<Branch> branchs;
在Branch类中,我将按如下方式注释公司实例变量:
@ManyToOne
@JoinColumn (name="ID", insertable=false, updatable=false)
private Company company;
就像这样,您可以在公司类的ID列上进行连接,并且您可以获得没有创建链接表的好处。