這裏的錯誤是我的jpaContext.xml:無法建立的EntityManagerFactory - 在表中加入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<context:annotation-config />
<context:component-scan base-package="com.pluralsight"/>
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="punit"></property>
<property name="dataSource" ref="dataSource"></property>
<property name="jpaVendorAdapter">
<bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true"></property>
</bean>
</property>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.dialect"
value="org.hibernate.dialect.MySQL5InnoDBDialect">
</entry>
<entry key="hibernate.hbm2ddl.auto" value="none"></entry>
<entry key="hibernate.format_sql" value="true"></entry>
</map>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory">
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
</property>
<property name="url"
value="jdbc:sqlserver://123.123.123.123:1433;databaseName=WikiGenome">
</property>
<property name="username" value="xxx"></property>
<property name="password" value="xxx"></property>
</bean>
</beans>
這裏是我的Disease.java:
@Entity @Table(name="Disease") public class Disease { @Id @GeneratedValue @Column(name="DiseaseID") public int DiseaseID; @Column(name="Name") public String Name; }
這裏是我的另一個類:
@Entity
@Table(name="ChrPosDisease")
public class ChrPosDisease implements Serializable{
@Id
@Column(name="chr")
public String chr;
@Id
@Column(name="pos")
public int pos;
@Id
@Column(name="DiseaseID")
public int diseaseID;
}
我是ne w來休眠和彈簧mvc框架,我只是按照教程中的指導。 我可以利用查詢結果:
@SuppressWarnings({ "unchecked"})
public List getDiseaseByName(String name) {
Query query = em.createQuery("Select d From Disease d Where d.Name=?1").setParameter(1,name);
List diseaseList=query.getResultList();
return diseaseList;
}
然而,當我通過DiseaseID連接兩個表,它提供了以下錯誤。
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [Select d From cuhk.cse.fyp.model.Disease d JOIN ChrPosDisease c Where d.DiseaseID=c.DiseaseID AND d.Name=?1]
查詢結果只有一個表時沒有出錯。
這裏是我用來連接兩個表的代碼:
@SuppressWarnings({ "unchecked"})
public List getJoinDiseaseByName(String name) {
Query query = em.createQuery("Select d From Disease d JOIN ChrPosDisease c Where d.DiseaseID=c.DiseaseID AND d.Name=?1").setParameter(1,name);
List diseaseList=query.getResultList();
return diseaseList;
}
有什麼不對?
感謝您的幫助。
補充: 更新ChrPosDisease
@SuppressWarnings("serial")
@Entity
@Table(name="ChrPosDisease")
public class ChrPosDisease implements Serializable{
@Id
@Column(name="chr")
public String chr;
@Id
@Column(name="pos")
public int pos;
@Column(name="DiseaseID")
public int diseaseID;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="DiseaseID",nullable=false)
private Disease disease;
}
更新疾病:
@SuppressWarnings("serial")
@Entity
@Table(name="Disease")
public class Disease implements Serializable{
@Id
@GeneratedValue
@Column(name="DiseaseID")
public int DiseaseID;
@Column(name="Name")
public String Name;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "ChrPosDisease")
private Set<ChrPosDisease> chrPosDisease = new HashSet<ChrPosDisease>();
}
我用上述實體和有例外部署。
我需要添加其他東西嗎?
你是指哪一個? 1.選擇d來自疾病d JOIN ChrPosDisease c其中d.DiseaseID = c.DiseaseID AND d.Name =?1 2.選擇d來自疾病d JOIN ChrPosDisease d其中d.Name =?1 – user3456617
查詢查詢= em。createQuery(「Select d From Disease d JOIN d.ChrPosDisease c where d.DiseaseID = c.DiseaseID AND d.Name =?1」)。setParameter(1,name); –
在上面的行只是看到你有d.ChrPosDisease,所以ChrPosDisease是一個表如何使用別名的表?刪除它,並嘗試讓我知道 –