0
我正在開發一個使用JDO彈簧的系統。我想用mysql加入來獲取數據。 我的表是:在JDO彈簧中加入兩個表格
USER_LOGIN:USER_ID,USER_NAME,USER_PASSWORD,user_role_id
USER_ROLE:ID,角色
我需要SQL是:
SELECT `A0`.`USER_ID`,`B0`.`ROLE` FROM `USER_LOGIN` `A0` INNER JOIN
`USER_ROLE` `B0` ON `A0`.`USER_ROLE_ID` = `B0`.`ID` WHERE
`A0`.`USER_NAME` = ? AND `A0`.`USER_PASSWORD` = ?
我想這樣做使用註釋而不是使用XML。 我的POJO課程是。
User.Java
@PersistenceCapable(table="User_Login")
public class User {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Column(name="user_id")
private Integer userId=0;
@Persistent
@Column(name="user_profile_name")
private String userProfileName=null;
@Persistent
@Column(name="user_email")
private String userEmail=null;
@Persistent
@Column(name="user_contact")
private String userContact=null;
@Persistent
@Column(name="user_name")
private String userName=null;
@Persistent
@Column(name="user_password")
private String userPassword=null;
@Persistent
@Column(name="user_role_id")
private Integer userRoleId=0;
@Persistent
@ManyToOne(fetch = FetchType.EAGER)
private Role userRole;
Role.java
@PersistenceCapable(table="User_Role")
public class Role {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@OneToMany(mappedBy = "user_role_id", fetch= FetchType.EAGER)
@Column(name="id")
private Integer roleId=0;
@Persistent
@Column(name="role")
private String role=null;
UserDaoImpl.java:
@Override
@Transactional
public List<User> getUser(String user_name, String user_password) {
PersistenceManager pm = this.persistenceManagerFactory.getPersistenceManager();
Transaction tx = pm.currentTransaction();
Query query = pm.newQuery(User.class);
query.setFilter("this.userName == userNameParam && this.userPassword==userPasswordParam");
query.declareParameters("String userNameParam, String userPasswordParam");
query.setResult("this.userId,this.userRole.role");
try {
// Start the transaction
tx.begin();
List<User> result = (List<User>)query.execute(user_name,user_password);
if(result.size()>0){
log.info(">>>>>00000000");
}else{
log.info("<<<<<<<=====000000");
}
// Commit the transaction, flushing the object to the datastore
tx.commit();
return result;
}
finally {
if (tx.isActive())
{
// Error occurred so rollback the transaction
tx.rollback();
}
pm.close();
}
我得到錯誤:
javax.jdo.JDOException: Exception thrown when executing query : SELECT
`A0`.`USER_ID`,`B0`.`ROLE` FROM `USER_LOGIN` `A0` LEFT OUTER JOIN
`USER_ROLE` `B0` ON `A0`.`USERROLE_ID_OID` = `B0`.`ID` WHERE
`A0`.`USER_NAME` = ? AND `A0`.`USER_PASSWORD` = ?
NestedThrowables:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown
column 'A0.USERROLE_ID_OID' in 'on clause'
我不知道USERROLE_ID_OID會在哪裏。我在JDo非常新。 請幫忙!!