0
得到以下錯誤:DB2,OpenJPA中,@ManyToMany:錯誤 「預期varchar類型,但列類型是BLOB」
<openjpa-2.2.2-r422266:1468616 fatal user error> org.apache.openjpa.persistence.ArgumentException: "com.qbe.asia.ebusiness.admin.intermediary.Intermediary.employees<element:class com.qbe.asia.ebusiness.admin.intermediary.Employee>" declares a column that is not compatible with the expected type "varchar". Column details:
Full Name: TINT_STAFF.STAFF_ID
Type: blob
Size: 0
Default: null
Not Null: false
中介,JAVA
@Entity
@Table(name = "TINTERMEDIARY")
public class Intermediary {
@Id
@Column(name="INTERMEDIARY_ID")
private String intermediaryId;
@ManyToMany
@JoinTable(name="TINT_STAFF",
joinColumns = {
@JoinColumn(name = "INTERMEDIARY_ID"),
@JoinColumn(name = "STAFF_ID")},
inverseJoinColumns = {
@JoinColumn(name = "STAFF_ID""),
@JoinColumn(name = "INTERMEDIARY_ID")})
private List<Employee> employees;
}
Employee.java
@Entity
@Table(name="TSTAFFMEMBER")
public class Employee {
@Id
@Column(name="STAFF_ID")
private String employeeId;
@ManyToMany (mappedBy = "employees")
private List<Intermediary> intermediaries;
}
TINT_STAFF表
CREATE TABLE TINT_STAFF
(
INTERMEDIARY_ID CHAR(19) NOT NULL,
STAFF_ID CHAR(19) NOT NULL,
PRIMARY KEY (INTERMEDIARY_ID, STAFF_ID)
);
所有的id字段都是CHAR(19)。
沒有關聯映射就像一個魅力,但只要我通過TINT_STAFF表添加ManyToMany,它說列是一個blob ..但事實並非如此。爲什麼?
更新:失敗
@Autowired
IntermediaryDaoJpaImpl dao; //this works fine
@Test
public void getIntermediariesTest() {
List<Intermediary> intermediaries = dao.getIntermediaries();
for(Intermediary intermediary : intermediaries) {
System.out.println("Employees: "+intermediary.getEmployees());
assert intermediary.getEmployees() != null;
}
}
道
測試:
@PersistenceContext
private EntityManager entityManager; //this works
public List<Intermediary> getIntermediaries() {
Query query = entityManager.createQuery("select o FROM Intermediary o");
return query.getResultList();
}
的persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>java:comp/env/jdbc/Datasource</jta-data-source>
<class>com.qbe.asia.ebusiness.admin.intermediary.Intermediary</class>
<class>com.qbe.asia.ebusiness.admin.intermediary.Employee</class>
<properties>
<property name="openjpa.jdbc.DBDictionary" value="db2(batchLimit=0)"/>
<property name="openjpa.Log" value="SQL=TRACE" />
<property name="openjpa.ConnectionFactoryProperties" value="PrettyPrint=true, PrettyPrintLineLength=72" />
<property name="openjpa.RuntimeUnenhancedClasses" value="supported" />
</properties>
</persistence-unit>
</persistence>
這會將員工設置爲null,並執行懶取。它急於獲取它拋出 org.apache.openjpa.persistence.PersistenceException:null FailedObject:select o FROM Intermediary o [java.lang.String]。 [.....................]引起:java.lang.NullPointerException \t at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setInverseRelation(JDBCStoreManager。 java:453) \t at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:413) –
同樣來自另一端,如果懶惰,則爲null如果是eager: org.apache.openjpa.persistence.PersistenceException:null FailedObject:select o FROM Employee o [java.lang.String] –
這是一個非常簡單的關係,它應該按預期工作,也許你有什麼問題JPA配置。當這個異常提出?你有一些測試代碼? –