java jpa SqlResultsMapping
这是我第一次学习SqlResultsMapping 我的数据库结构: 表“公司”: 表“工作人员”: Company.java WriteBinaryFile.java:java jpa SqlResultsMapping,java,jpa,binaryfiles,sqlresultsetmapping,Java,Jpa,Binaryfiles,Sqlresultsetmapping,这是我第一次学习SqlResultsMapping 我的数据库结构: 表“公司”: 表“工作人员”: Company.java WriteBinaryFile.java: 我做错了什么错误?我怎样才能解决它 错误本身只是说,你得到了一个公司回来,但试图把它投给一系列的公司。你能检查一下你真正写入流的是什么类型吗?@swinkler哪个文件?WriteBinaryFile:List companyList=q.getResultList;这真的是一个公司阵列列表吗?@KKLMichael您是否使用
我做错了什么错误?我怎样才能解决它 错误本身只是说,你得到了一个公司回来,但试图把它投给一系列的公司。你能检查一下你真正写入流的是什么类型吗?@swinkler哪个文件?WriteBinaryFile:List companyList=q.getResultList;这真的是一个公司阵列列表吗?@KKLMichael您是否使用IDE,如Eclipse、Netbeans和Intellij?有了它,您可以调试代码。@KKLMichael请检查您的代码。从帖子中删除滚动条花了很多时间,可能有些更改被覆盖了。谢谢
ID Name
1 ABC Sdn Bhd
2 DEF Sdn Bhd
3 GHI Sdn Bhd
staffID staffName companyID
0001 Ali 1
0002 Abu 2
0003 Ahmad 2
0004 Siti 3
0005 Raju 3
@Entity
@Table(name = "company")
@SqlResultSetMapping(name = "COMPANY", entities =
{
@EntityResult(entityClass = Company.class, fields =
{
@FieldResult(name = "ID", column = "ID"),
@FieldResult(name = "name", column = "name")
}),
@EntityResult(entityClass = Staff.class, fields =
{
@FieldResult(name = "staffID", column = "staffID"),
@FieldResult(name = "staffName", column = "staffName"),
@FieldResult(name = "companyID", column = "companyID")
})
})
@XmlRootElement
@NamedQueries(
{
@NamedQuery(name = "Company.findAll",
query = "SELECT c FROM Company c"
),
@NamedQuery(name = "Company.findById",
query = "SELECT c FROM Company c WHERE c.id = :id"
),
@NamedQuery(name = "Company.findByName",
query = "SELECT c FROM Company c WHERE c.name = :name"
)
})
public class Company implements Serializable
{
@OneToMany(mappedBy = "companyID")
private Collection<Staff> staffCollection;
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID")
private Integer id;
@Column(name = "name")
private String name;
//constructor
//getters and setters
...
}
@Entity
@Table(name = "staff")
@XmlRootElement
@NamedQueries(
{
@NamedQuery(name = "Staff.findAll", query = "SELECT s FROM Staff s"),
@NamedQuery(name = "Staff.findByStaffID",
query = "SELECT s FROM Staff s WHERE s.staffID = :staffID"
),
@NamedQuery(name = "Staff.findByStaffName",
query = "SELECT s FROM Staff s WHERE s.staffName = :staffName"
)
})
public class Staff implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "staffID")
private String staffID;
@Column(name = "staffName")
private String staffName;
@JoinColumn(name = "companyID", referencedColumnName = "ID")
@ManyToOne
private Company companyID;
//constructor
//getters and setters
...
}
public class WriteBinaryFile
{
public static void main(String[] args)
throws FileNotFoundException, IOException, ClassNotFoundException
{
EntityManagerFactory emf = Persistence.createEntityManagerFactory("BinaryFileTestPU");
EntityManager em = emf.createEntityManager();
StringBuilder sql = new StringBuilder();
sql.append("select c.*, s.* ");
sql.append("from company c ");
sql.append("join staff s ");
sql.append("on c.ID = s.companyID");
Query q = em.createNativeQuery(sql.toString(), "COMPANY");
List<Company[]> companyList = q.getResultList();
//---Write object to binary file---
FileOutputStream fos = new FileOutputStream("test.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(companyList);
oos.flush();
oos.close();
em.close();
emf.close();
}
}
public class ReadBinaryFile
{
public static void main(String[] args)
throws FileNotFoundException, IOException, ClassNotFoundException
{
//---Read object from binary file---
FileInputStream fis = new FileInputStream("test.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
List<Company[]> companyList = (List<Company[]>)
ois.readObject();
ois.close();
for(Company[] company: companyList){
System.out.println(company[0].getName());
}
}
}
Exception in thread "main" java.lang.ClassCastException:
binaryFileTest.Company cannot be cast to [LbinaryFileTest.Company;
at binaryFileTest.ReadBinaryFile.main...