Моя цель состоит в том, чтобы представить следующие столбцы в JTable:
Я пытаюсь получить данные из базы данных, см. Диаграмму взаимосвязи сущностей ниже::
Как видите, для расчета фактического количества товара в инвентаре требуется несколько объединений, поскольку они явно не хранятся в базе данных.Сначала я должен умножить Поток от Транзакций (поток относится к потоку предметов в и из инвентаря, таким образом это относится к целочисленному количеству) и In_Or_Out из таблицы Advicenote, затем я должен суммировать значения, сгруппированные согласно Item_IDs,Кстати, я использую Hibernate с Apache Derby в NetBeans… вот где я сейчас нахожусь:
У меня есть метод FillData () с DefaultTableModel и HQL, который не работает:
private void FillData(){
DefaultTableModel dtm = new DefaultTableModel();
dtm.addColumn("Partner or Project");
dtm.addColumn("Category");
dtm.addColumn("Item");
dtm.addColumn("Quantity (in/or)");
dtm.addColumn("Date");
Font f = new Font("Georgia", Font.BOLD, 16);
JTableHeader header = ledgerTable.getTableHeader();
header.setFont(f);
ledgerTable.setRowHeight(25);
List<TableModel> result = new ArrayList<TableModel>();
try {
session = sessionFactory.openSession();
transaction = session.beginTransaction();
Query query = session.createQuery("select c.name from Advicenote a join Transactions as t join items as i join categories as c group by a.advicenoteId");
result = query.list();
transaction.commit();
}
catch (HibernateException e) {
if (transaction != null) {
transaction.rollback();
}
}
for (int i = 0; i < result.size(); i++) {
dtm.addRow(new Object[]{result.get(i).getPartnername(), result.get(i).getCategoryname(), result.get(i).getItemname(), result.get(i).getQuantity(), result.get(i).getDate()});
}
this.ledgerTable.setModel(dtm);}
И класс TableModel
class TableModel {
private String partnername;
private String categoryname;
private String itemname;
private int quantity;
private Date date;
public TableModel(String partnername, String categoryname, String itemname, int quantity, Date date) {
this.partnername = partnername;
this.categoryname = categoryname;
this.itemname = itemname;
this.quantity = quantity;
this.date = date;
}
public String getPartnername() {
return partnername;
}
public void setPartnername(String partnername) {
this.partnername = partnername;
}
public String getCategoryname() {
return categoryname;
}
public void setCategoryname(String categoryname) {
this.categoryname = categoryname;
}
public String getItemname() {
return itemname;
}
public void setItemname(String itemname) {
this.itemname = itemname;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
Я не знаю, нахожусь ли я на правильном пути, но мне определенно понадобится помощь в написании соответствующего HQL, который бы удовлетворялмои потребности, потому что я немного сбиваюсь с толку, когда нужно включить несколько объединений и групп, а также другие понятия.Поэтому мне в основном нужна помощь в написании рабочего HQL.Кроме того, данные должны сортироваться по периоду времени или конкретному партнеру / проекту (см. GUI вверху), что может быть сделано с помощью дальнейших запросов HQL, не так ли?Буду признателен за любую помощь!
Я также опубликую XML-отображения здесь:
Advicenote.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Feb 9, 2019, 3:57:52 PM by Hibernate Tools 4.3.1 -->
<hibernate-mapping>
<class name="classes.Advicenote" table="ADVICENOTE" schema="APP" optimistic-lock="version">
<id name="advicenoteId" type="int" column="ADVICENOTE_ID">
<generator class="native" />
</id>
<property name="advicedate" type="date" column="ADVICE_DATE" length="10" />
<property name="inOrOut" type="java.lang.Short" column="IN_OR_OUT" />
<many-to-one
name="partner" class="classes.Partner"/>
<set name="transactions" table="TRANSACTIONS" inverse="false" cascade="all" lazy="true" fetch="select">
<key column="ADVICENOTE_ID" not-null="true"/>
<one-to-many class="classes.Transactions"/>
</set>
</class>
</hibernate-mapping>
Categories.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="classes.Categories" table="CATEGORIES" schema="APP" optimistic-lock="version">
<id name="categoryId" type="int">
<column name="CATEGORY_ID" />
<generator class="native" />
</id>
<property name="name" type="string">
<column name="NAME" length="100" />
</property>
<set name="items" table="ITEMS" inverse="true" cascade="all" lazy="false" fetch="select">
<key>
<column name="CATEGORY_ID" not-null="true" />
</key>
<one-to-many class="classes.Items" />
</set>
</class>
</hibernate-mapping>
Items.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="classes.Items" table="ITEMS" schema="APP" optimistic-lock="version">
<id name="itemId" type="int" column="ITEM_ID">
<generator class="native" />
</id>
<property name="name" type="string" column="NAME" length="100"/>
<property name="netPrice" type="java.lang.Integer" column="NET_PRICE"/>
<property name="vatRate" type="java.lang.Integer" column="VAT_RATE"/>
<many-to-one name="category" class="classes.Categories" fetch="select" column="CATEGORY_ID" not-null="true" lazy="false"/>
</class>
</hibernate-mapping>
Partner.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="classes.Partner" table="PARTNER" schema="APP">
<id name="partnerId" type="int">
<column name="PARTNER_ID"/>
<generator class="native"/>
</id>
<property name="partnerName" type="string" column="PARTNER_NAME" length="100"/>
<set name="advicenotes" table="ADVICENOTE" inverse="false" cascade="all" lazy="true" fetch="select">
<key column="PARTNER_ID" not-null="true"/>
<one-to-many class="classes.Advicenote" />
</set>
</class>
</hibernate-mapping>
Transactions.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="classes.Transactions" table="TRANSACTIONS" schema="APP" optimistic-lock="version">
<id name="transactionsId" type="int" column="TRANSACTIONS_ID">
<generator class="native" />
</id>
<property name="flow" type="int" column="FLOW" not-null="true" />
<property name="netPrice" type="java.lang.Integer" column="NET_PRICE" />
<many-to-one name="advicenote" class="classes.Advicenote"/>
<many-to-one name="item" class="classes.Items" fetch="select" cascade="save-update" column="ITEM_ID" unique="true" not-null="true"/>
</class>
</hibernate-mapping>