SlideShare a Scribd company logo
1 of 27
Download to read offline
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
DATA AWARE TASK
Step by Step Guide for Java
Version 0.5
J. Tangkuampien
Open-Licence 2014 J. Tangkuampien
http://creativecommons.org/licenses/by-nc-sa/2.5/za/
Based partly on scenario and data from the
IEB matric practical paper – November 2009
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Task 1 – Database Design & Creation
Required: Excel spreadsheet containing normalised database (2 tables each with primary
key and a one-to-many relationships ie. Foreign key à primary key link)
Output: Java DB database that reflect the tables contained in the spreadsheet.
We are going to be using the Pet-Owner example in these descriptions. This is a one-to-
many relationship where one pet only have one owner but one owner can have many pets.
This results in the PET table containing a foreign key field OWNERID which is linked to the
primary key (also named OWNERID) of the OWNER table.
Important: When choosing designing your database:
• Make sure that each table has a numbered primary key
• The names of your database and tables are in capitals and contains no spaces, no
SQL and Java reserved keywords or any illegal characters.
• The foreign key field values all exists as primary key fields in the related table.
Step 1.1 – Decide on type of column for the two tables. Since the PET table contains link to
OWNER, we should create the OWNER table first before the PET table.
Step 1.2 – Create a new JavaDB Database by going to the “Services” tab (Window à
Services if you can’t see it. In the tab, expand “Databases”, and choose “Create Database”.
In the dialog box that pops up, choose the database’s name, leave the Username and
Password as blank – despite the on-screen recommendation. You may choose a password
here but it will not be possible to recover your password if you forget it so it is best to leave
everything as blank. Take note of the database location (You can click “Properties” to
change this.)
Jakkaphan Tangkuam…, 14/3/23 5:31 AM
Comment [1]: It	
  is	
  important	
  that	
  there	
  is	
  a	
  
primary	
  key	
  field.	
  You	
  can	
  not	
  generate	
  entity	
  class	
  
from	
  a	
  table	
  without	
  a	
  primary	
  key	
  field.	
  
Jakkaphan Tangkuam…, 14/3/23 5:42 AM
Comment [2]: SQL	
  reserved	
  words	
  will	
  turn	
  
BLUE	
  in	
  the	
  SQL	
  command	
  execution	
  window	
  (see	
  
Step	
  1.4	
  on	
  how	
  to	
  get	
  it).	
  It	
  is	
  possible	
  to	
  override	
  
and	
  use	
  reserved	
  words	
  as	
  table	
  or	
  column	
  names	
  if	
  
you	
  put	
  them	
  in	
  quotes.	
  Do	
  NOT	
  do	
  this	
  because	
  
things	
  will	
  break	
  later	
  on.	
  To	
  check	
  for	
  Java	
  reserved	
  
word,	
  type	
  it	
  in	
  Netbeans	
  file	
  edit	
  windows	
  and	
  see	
  
if	
  it	
  is	
  BLUE.	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Step 1.3 – Once the database is created, you will need to connect to it. This can be done
by locating the connection which should be just below the “Driver” folder. The one you
created should end with the name of the database. Right-click on it and choose connect. A
username/password window may pop up at this stage. Just click ok as your password is
blank.
Step 1.4 – We will now create a new table in the “APP” schema using SQL. You should
make the “APP” schema the default one by right-clicking and choose “Set as Default
Schema”. If APP is already bold (see below) then it is already default. To create a new table
in APP using SQL, right-clicking on the “Tables” folder (or APP) and choose execute
command (Do not choose Create Table). This will open up an edit window on the right.
Type in the appropriate create command. (VARCHAR is text with the number between the
brackets indicating its size). Run the command by clicking on the “run SQL button” (not
the same as the run project button).
If there are any errors, read the error message and correct the command. Once you can run
this successfully, save the SQL statement to a file in case you need to recreate the table for
Jakkaphan Tangkuam…, 14/3/23 5:36 AM
Comment [3]: It	
  is	
  possible	
  to	
  use	
  the	
  GUI	
  to	
  
create	
  table,	
  but	
  certain	
  functions	
  such	
  as	
  creating	
  a	
  
auto-­‐numbered	
  fields	
  are	
  only	
  available	
  via	
  SQL	
  
currently.	
  It	
  is	
  better	
  to	
  create	
  using	
  SQL	
  in	
  any	
  
case,	
  because	
  you	
  will	
  be	
  able	
  to	
  save	
  the	
  SQL	
  for	
  
back-­‐up	
  purposes.	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
whatever reason. Clear the command window after you have done this.
Note that you can choose to start from a different number and not always from 1.
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Step 1.5 – You will need to create SQL commands to insert data into your table. The
easiest way to do this is via Excel as shown below. Do this with one line first to make sure
that this works. Also make sure your command ends with semi-colon so you will be able to
have multiple statements.
Copy the command to the SQL window. You will notice that Excel has automatically add
tabs in between the cells.
You can do a search and replace for tab by using Edità Replace (or Ctrl-H). Search for
backslash t (see below) and leave the replace with blank. You will need to turn on use
regular expression to make this work. To do that, click this button. If you have done this
correctly, all tabs will be highlighted – click replace all.
All tabs should now be gone from the command. Run it and make sure that it works.
Make the necessary correction to the first row before copy and pasting the commands to
the rest of the sheet. Copy and paste the commands (except the first since you have done
that) and follow the same procedure as before to get rid of the tabs.
Jakkaphan Tangkuamp…, 14/4/6 8:37 AM
Comment [4]: Alternatively	
  you	
  can	
  use	
  the	
  
concatenation	
  command	
  in	
  Excel	
  to	
  create	
  a	
  cell	
  
with	
  all	
  the	
  others	
  concatenated	
  together.	
  This	
  will	
  
save	
  you	
  from	
  having	
  to	
  get	
  rid	
  of	
  the	
  tabs	
  as	
  shown	
  
previously.	
  
	
  
You	
  can	
  also	
  make	
  use	
  of	
  the	
  CALL	
  
SYSCS_UTIL.SYSCS_IMPORT_TABLE	
  command	
  to	
  
import	
  data	
  from	
  a	
  csv	
  file.	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Step 1.6 – Create the other tables in the same
way. Remember to match the type of any foreign
key field with that of the corresponding primary
key. In our example, OwnerID is an INTEGER.
Other types you may want to use are DOUBLE,
DATE and BOOLEAN. All of these can be used
standalone with no argument provided (like
INTEGER)
Step 1.7 – Once all the tables are created, run the
command below to link the keys. Note that you
should alter the table containing the foreign key (line
1). Line 3 refers to the foreign key fields in the table
you are altering and line 4 contains the references to
the primary key – REFERENCES Table (primary key).
Test that the
relationship is working by inserting a new Pet with an
non-existent ownerID and delete an Owner record that a Pet
linked to it. These action should not be possible.
Step 1.8 – Disconnect and delete the connection entry in the services list. We will be create
a new one in the next task. Note that deleting the connection does not delete the database.
You can still find the database folder by going to the database location folder. It is
recommended that you also delete any other connections at this point so that you are not
confused by which one to choose at a later stage.
Table	
  with	
  Foreign	
  key	
  
Table	
  with	
  Primary	
  key	
  
Foreign	
  key	
  field	
  
Primary	
  key	
  field	
  
Name	
  of	
  constraint	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Task 2 – Linking the Database to a Java Application
These steps should be done all in one go in order to ensure that the projects are
transferable to other locations.
We will now create Netbeans application and then add an embedded database to it. We will
be using the PetDB we created earlier.
Step 2.1 – Create a new Netbeans Project – Java Application is
fine. Locate the PetDB database folder in your copy. Copy the
PetDB database folder into the project folder. The project folder
is the one listed under properties. You should also be able to
see other folders (nbproject, src) in the project folder. You will
need the exact path to the database folder (including the folder
name – PETDB in this example) in the next step.
Step 2.2 – In the service tab, under driver,
right-click on “Java DB (Embedded)” and then
“Connect Using ..”.
In the window that pops up, enter the exact
path to your database folder (including the
database name)
and click “Test Connection”.
If your connection is successful, you will see
“Connection Succeeded” on the bottom left.
If not, check that you have enter the correct
path (You must indicate the database folder
and not the folder that contains the database
folder. The correct database folder will
contain ‘log’ and ‘seg0’ folders. Also check
that you have not made a spelling mistake.
Once the test is successful, click “Finish”
In the next window that pops up, make sure “APP” is selected as the default schema. If you
did not do this at this stage, you can at a later stage make APP the default one as before
(See Step 1.4).
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Step 2.3 – We will now create entity classes from the database. To do this, right click on
the package icon (see below) of your project and choose New à Entity Classes from
Database
In the window that pops up, make sure the Database connection is the one you have just
created in step 2.2. The correct entry should NOT link to localhost. After making sure that
the database selection is correct, you should see your tables listing in ‘Available Tables’ –
add all the tables to your solution (Click “Add All >>”)
You may change the name of the entity classes that will be generated here if necessary. For
example, if you have named the table “OWNERTB”, you may want the class to be called
“Owner” instead of “Ownertb”.
Jakkaphan Tangkuam…, 14/3/23 6:01 AM
Comment [5]: Choosing	
  an	
  incorrect	
  connection	
  
here	
  will	
  result	
  in	
  your	
  program	
  not	
  working	
  and	
  it	
  
will	
  be	
  rather	
  difficult	
  to	
  correct	
  this	
  without	
  
starting	
  again	
  from	
  this	
  step.	
  	
  
Jakkaphan Tangkuam…, 14/3/23 6:03 AM
Comment [6]: This	
  will	
  ensure	
  that	
  the	
  class	
  you	
  
created	
  from	
  the	
  table	
  has	
  more	
  sensible	
  name.	
  It	
  is	
  
more	
  sensible	
  for	
  each	
  PET	
  to	
  have	
  an	
  OWNER	
  than	
  
for	
  each	
  PETTB	
  to	
  have	
  an	
  OWNERTB.	
  Note	
  that	
  
most	
  assignments	
  including	
  your	
  main	
  PAT	
  requires	
  
that	
  you	
  name	
  everything	
  sensibly.	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
The following changes are recommended for the Mapping Options:
Use java.util.List as
collection Type. This will
result in each Owner object
having a List of Pets that
he/she owns.
Uncheck “Use Column
Names in Relationships”.
This will generate an attribute
of type Owner in the Pet class
called Owner instead of
Ownerid. (This name choice will also be in the get/set methods. This choice makes more
sense as you will actually beworking with the action Owner object and not its ids.)
After this, you should be able to see the two new entity classes listed under the project
package. Have a look at what Netbeans generated. You should get the same attributes as
the database fields as well as constructor, get, set and toString methods. Note that the
computer did not generate a constructor that takes in all attributes.
IMPORTANT: Note about boolean type when using Netbeans 7.3 & 7.4
When one of the type is a boolean, Netbeans 7.3 and 7.4 (This is fixed in 8.0) will
errornously create that attribute as type “Serializable” instead of boolean. You will need to
edit the generated Entity class file and replace the attibute type “Serializable” with type
“boolean” (with small b). Also modify the get and set methods to reflect this. Do not just do
a search and replace all “Serializable” with “boolean” – there are other instances of
“Serializable” that must stay. Do a clean and build before continuing.
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Step 2.4 – The next step is to create a JFrame Form that will have all the GUI elements.
Add a JTabbedPane to the JFrame. Rename the added JTabbedPane according to
convention (i.e. tbpTabs or something similar). You can then drag and drop a JPanel on to
the JTabbedPane. This will create new tab. Rename the added JPanel and change its text
to “Owners”. We will be using this tab to display all of the owner information in a table form.
Add another JPanel to create a new tab, but be careful not to drop the JPanel on to the
existing tab, you must drop it onto the JTabbedPane so drop it here and NOT here
Make sure you have 4 tabs as shown above. Remember to rename each JPanel as you
add them.
Jakkaphan Tangkuam…, 14/3/23 6:08 AM
Comment [7]: Note	
  that	
  the	
  Java	
  classes	
  
corresponding	
  to	
  the	
  components	
  in	
  the	
  pallete	
  are	
  
all	
  actually	
  named	
  with	
  J	
  in	
  front.	
  In	
  these	
  notes,	
  all	
  
the	
  interface	
  components	
  are	
  referred	
  to	
  using	
  its	
  
Java	
  class	
  name	
  i.e.	
  JPanel	
  instead	
  of	
  Panel,	
  JTable	
  
instead	
  of	
  Table,	
  JList	
  instead	
  of	
  List	
  etc.	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Step 2.5 – We will now work on the first tab which will display all of the owner information in
a table form. To do this, go back to the first tab and drag and drop a new JTable on to its
JPanel. Resize the JTable so that it takes up all available space in the JPanel. Also rename
this JTable appropriately.
This JTable’s content will be bounded to the OWNER table in the database. This means
that the content of the JTable will always reflect the content of the OWNER table in the
database. To do this, right click anywhere on the interface table and choose “Bind”. We are
going to bind all elements to the database table, so choose “elements”.
You will then see a Bind dialog box, choose “Import Data to Form”. In the next popup
window, choose the correct database connection (be careful to choose the same one you
used to generate the Entity classes). In the Database Table drop down list, choose the
correct table (OWNER in this example). Click “OK” to move on.
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
You can now choose which fields to be
included; typically you will want to add all
fields. For some reason the list is always
displayed in reverse so you may need to move
things up and down to choose the correct
order. Click “OK” once you are happy with the
ordering. Note the petList field that will contain
all the pets that belong to this Owner.
Step 2.6 – We will now attempt to run the program to see if the interface table has been
populated correctly. If you just see a “build successful” message without the JFrame
popping up it may be because you asked Netbeans to create a main class for you. If this is
the case, you will need to delete that class (it should have an empty main method in it).
When you run the program again, it will ask you for the new main class to be use – choose
the JFrame class.
Jakkaphan Tangkuam…, 14/3/23 6:12 AM
Comment [8]: It	
  is	
  shown	
  as	
  PetCollection	
  in	
  the	
  
diagram.	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
The program should attempt to start the frame and show a “PersistenceException” in the
process.
This is because Netbeans itself is connected to the embedded database (by definition and
embedded database is only accessible by one program at a time – usually by the program
(or any of its threads) that it is embedded in). To correct this error, you will need to go back
to the services tab and disconnect Netbeans from the database.
Every time you ask Netbeans to link to the database (eg to Bind or generate entity classes)
– Netbeans will make a connection to the database. So make sure to check for
disconnection as Netbeans may have made the connection previously.
Note that you will also get the same error if you attempt to run a second instance of your
program.
Once run successfully, you should see all the information on each owner. Note that the
PetList field does not contain the list as yet.
Jakkaphan Tangkuam…, 14/3/23 6:16 AM
Comment [9]: This	
  is	
  because	
  you	
  choose	
  the	
  
default	
  fetch	
  type	
  when	
  generating	
  the	
  entity	
  
classes.	
  If	
  you	
  want	
  the	
  list	
  to	
  be	
  visible	
  at	
  the	
  start,	
  
you	
  could	
  have	
  chosen	
  eager	
  as	
  the	
  fetch	
  type.	
  
However,	
  this	
  does	
  NOT	
  make	
  a	
  difference	
  to	
  your	
  
task	
  and	
  is	
  not	
  worth	
  going	
  back	
  to	
  change	
  it.	
  Lazy	
  
fetch	
  type	
  means	
  that	
  the	
  content	
  of	
  the	
  list	
  will	
  
only	
  be	
  fetched	
  whenever	
  that	
  object	
  is	
  requested	
  
and	
  not	
  right	
  at	
  the	
  start.	
  You	
  can	
  see	
  the	
  reason	
  
why	
  you	
  may	
  not	
  want	
  to	
  fetch	
  everything	
  at	
  the	
  
start	
  if	
  your	
  database	
  table	
  contains	
  thousands	
  of	
  
records.	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Step 2.7 – You will now add another JTable to the PETS tab. (Drag and drop JTable to tab,
rename, right click à Bind à Elements. Choose the correct connection (same one as
before) and choose the PET table, then add and reorder column).
When you run again (don’t forget to disconnect), the Pet JTable should be populated.
You can edit to the toString method of the Owner class to make it output the name and
surname instead of the default one seen above.
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Step 2.8 - The binding process created 5 new components in the
JFrame. Look for them in the Navigator.	
  Two of them are Lists
which are the data structures behind the two JTables. We will
need to make these Lists updated automatically when the
database changes. To do this, right click on each list and choose
‘Properties’.
In the properties window, tick both ‘modifiableWrapper’ and
‘observable’.
Do this for the List that is linked to the other
JTable as well.
Do a clean a build and you should see no
changes to the JTables.
Step 2.9 – Test that you are able to edit the information in each cell by clicking twice on the
cell. The changes should be reflect but does not persist across restart of the program. This
is fine as we have not yet done the persistence part. We will do this in the next task.
Step 2.10 – After you have
bounded all each database table
to a JTable, delete the
Connection from the Database
section in the Services tab. This is
so that you do not make a mistake
of choosing this in future. Make
sure no other connection exists.
Jakkaphan Tangkuam…, 14/3/23 6:18 AM
Comment [10]: This	
  will	
  allow	
  the	
  list	
  to	
  be	
  
modified	
  as	
  the	
  interface	
  changes.	
  
Jakkaphan Tangkuam…, 14/3/23 6:18 AM
Comment [11]: This	
  will	
  allow	
  the	
  content	
  of	
  the	
  
List	
  to	
  be	
  observable	
  so	
  the	
  linked	
  interface(s)	
  can	
  
be	
  updated	
  accordingly.	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Step 2.11 – Recall that the database folder information was hard-linked to the DB folder by
specific path. This means that the project is currently not running when moved to a different
computer. This last step will make the path relative so that you can run the project in other
location.
To do this, expand the “META-INF” folder found within the project folder. In that folder,
open the file “persistence.xml”, click on the source tab.
In the source edit the url property and remove any absolute path – leaving with just the
name of the database
Test that your program still runs correctly.
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
You should also copy derby.jar file to your project folder and then add this file to the library
in your project. This is necessary if your Netbeans is not the exact same version as the one
used at school.
If you can’t find a copy of derby.jar – search for one in your
computer. There must be one if you connection is successful.
Copy this file to your project folder i.e. in the folder with build,
nbproject, src etc (see right).
After that, right-click on “Library” in
your project tab in Netbeans and
choose add JAR/Folder.
Select derby.jar from the right
window. Make sure you choose to
reference as “Relative Path”.
Even if you have done this step, opening your project in other computer initially may result
in a missing reference error. Your project should still work without resolving this error. You
can also resolve it by telling Netbeans where derby.jar is (it should be in the project folder
because you just copied it there).
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Task 3 – Other interfaces
Before we go on with this task – note that by binding to the two database tables previously,
Netbeans has created for us to data structures (of type List) i.e. a List of Owners and a
List of Pets. You can see them in the Navigator window, under other components.
(ownerList and petList). Note that you should only
have one of each. If you have more than one then
you may have done one of the previous steps
more than once.
These Lists are linked to the database tables and
should be used from this point on to bind
additional interface components. DO NOT bind
any additional component via the “Import
Data to Form” button. Instead, you should
select either ownList or petList from the
drop down list
as the binding source.
Step 3.1 – We will start off with the “edit Owner” tab so that it ends up looking as shown
below. The component of the left is an interface list (JList) that will be bound to the data
structure List ownerList (which in turn is bound to the database table OWNER). Selecting
an owner from that JList will show that
owner’s attributes on the right. The
component next to Pets is also a JList.
The <<, <, > and >> buttons will take
the user to the first, previous, next and
last item on the left JList respectively.
The other buttons are self-explanatory.
Start off by adding, positioning and
chaning the text on the components as
shown. Also remember to name each
component appropriately (eg.
txfFirstname, txfLastName,
btnAddNewOwner etc.)
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Step 3.2 – We will now bind the JList to the ownerList as follows. Right click on the JList
and choose Bind à elements (all of the elements in the list will reflect the content of
ownerList). DO NOT click on “Import Data to Form” and rebind the database table.
Once bound, you can run the program and
should see the following. The toString
method is used for display as before.
`Note that there are now two interface
components (the JTable in
the OwnersTab and the
JList in this tab) that are
bound to the same
ownerList which in turn is
bound to the database
table OWNER. The JList in
the above tab is named
“lstOwners”.
The diagram to the right
summarises the link
between the ownerList
(JList User Interface
component), lstOwners
(List data structure) and
OWNER table (database).
For the rest of the document, the data structure list will be referred to as List (or
List<Owner>) and the interface list will be referred to as JList. Netbeans normally name
your data structure list as <name of entity class> followed by List. Your interface List (JList)
should be named with lst prefix as recommended.
Jakkaphan Tangkuam…, 14/3/23 6:30 AM
Comment [12]: If	
  you	
  do	
  this	
  again,	
  you	
  will	
  get	
  
another	
  EntityManager,	
  List	
  and	
  Query	
  objects	
  
associated	
  with	
  this	
  JList.	
  Do	
  NOT	
  redo	
  that	
  step	
  
(unless	
  you	
  really	
  want	
  new	
  copies	
  of	
  those	
  three	
  
things)	
  
Jakkaphan Tangkuam…, 14/3/23 6:31 AM
Comment [13]: It	
  is	
  possible	
  to	
  use	
  Binding	
  
Expression	
  in	
  the	
  binding	
  window	
  to	
  choose	
  exactly	
  
what	
  the	
  JList	
  will	
  show.	
  Do	
  NOT	
  do	
  this	
  because	
  if	
  
you	
  do,	
  the	
  JList	
  will	
  be	
  linked	
  to	
  a	
  List	
  of	
  Strings	
  
instead	
  of	
  a	
  the	
  List	
  of	
  Owner	
  objects.	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Step 3.3 – The next step is to bind all
the components on the right to reflect
the attributes of the selected owner on
the left JList.
We will start with the Owner First name
Text field. Right-click on the text field and choose “Bind” and then “Text”
The text will be bound to the selected item of the JList (and not ownerList or any other List
or JList) – so select the list (lstOwners in our case) as the Binding Source.
In the binding Expression, navigate to
“SelectedElement” and “ownerfirstname”.
Once bound, run the program and check
that the first name changes as you move
up and down the list.
Do the same thing for the other text fields.
You should also bound the Pet JList to the petList attribute of “SelectedElement” as well.
Jakkaphan Tangkuam…, 14/3/23 6:36 AM
Comment [14]: It	
  is	
  important	
  to	
  choose	
  the	
  
right	
  thing	
  to	
  bind	
  to	
  -­‐	
  List	
  vs	
  JList.	
  The	
  general	
  rule	
  
is	
  to	
  think	
  about	
  whether	
  or	
  not	
  you	
  need	
  the	
  
selected	
  item.	
  Only	
  a	
  JList	
  knows	
  which	
  item	
  is	
  
currently	
  selected	
  –	
  so	
  if	
  you	
  need	
  to	
  know	
  which	
  
item	
  is	
  selected	
  currently,	
  use	
  a	
  JList.	
  If	
  you	
  don’t	
  
need	
  to	
  know,	
  use	
  the	
  List.	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Run the program and make sure everything works as expected.
Use the following components to bind to the different data types:
• Single line String – use JTextField
• Multiple line String – use JTextArea (JTextPane if the user shouldn’t be able to
change it)
• double or ints – use JSpinner (with model set as numbers)
• Date – use JFormattedTextField or JSpinner (with model set as Date)
• boolean – use JCheckBox
• List of objects:
o Use JComboBox (if user can select only one item – useful for one to many
relationship – eg. In Pet window where there can only be one owner).
o Use JList (if user can select multiple items – useful for the other side of the
relationship – eg. In Owner where they can have many pets.)
We will now add code to the Navigational and Search buttons. We will deal with the other
buttons in the next task.
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Step 3.4 – Navigational Buttons
Code the action for the navigational buttons. The following points may come in handy:
A List<Owner> allows you to work with the data in the List. Use the following methods:
• get(int	
  pos) – will give you back the Object (Owner in our case) at the given
position.
• size() will give you the size of the List at the moment.
A JList allows you to get and set selected item on the JList. Use the following methods on
a JList
• getSelectedIndex() will give you the index (position) of the selected item (it starts
from 0).
• getSelectedValue() will give you the object (but you will have to cast it to the
correct class e.g
Owner	
  selectedOwner	
  =	
  (Owner)lstOwners.getSelectedValue();	
  
• setSelectedIndex(int	
  pos) – let you set the selected item to the given position.
However, the list does not autoscroll to that item (see next one for how to do this).
• setSelectedValue(Object	
  o,	
  boolean	
  autoscroll) will let you select an item
and also allow you to scroll to that position. You will need to locate the object first
which can only be done via the List ownerList. For example, this code will set the
selection to the first item on the JList.
Owner	
  firstOwner	
  =	
  ownerList.get(0);	
  
lstOwners.setSelectedValue(firstowner,	
  true);	
  
Step 3.5 – Add code to the search button to allow items matching the search criterion to be
selected. To fit in with the task requirement, you only need to search for one attributes of
the entity class (eg. Search for last name of the owner). You can do the search by using a
loop and testing if each object matches the given criterion. You only need to select just
ONE matching object, so the first one you find is fine. Use setSelectedValue method to
choose the matching object.
Step 3.6 – Do a similar thing for the “Edit Pets” tab. We will do the add, edit and remove
buttons in the next task.
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Task 4 – Update, Remove, Add and Search Buttons
You will now work on the Update, add and remove buttons in the “Edit Owners” tab.
Update
Update operation will depend on whether or not there is a selected item in the JList. Your
code should check for this before attempting update (or you can set up your interface so it
is never possible to update while no Owner is selected). There are many ways to do update
but you should aim to the user to not be able to move away from the selected item (or
delete or add new item for that matter) while he is editing. It may be easier to:
• Disable the attribute fields by default until the user click the update button.
• Once clicked, the fields should then be editable and the update button’s label
changed to “Commit”. The other buttons (navigational, add and remove) should be
disabled so that the user can not move away or attempt to do other operation.
• The user can then edit the field and click on “Commit” (labelled “Update”
previously). On commit, you program will do the reverse of the previous step (e.g.
disable the fields, enable the list and the other buttons as well as change the label of
the Update button back. Note that since the text fields are already bounded to the
selected object, any changes made to it already updates the selected object. All this
is left is to make sure the object is changed in the database. Here are some hints on
how to do this:
o Use getSelectedValue() method on the JList to locate the selected Owner
(You will need to cast as getSelectedValue() returns an Object) and then use
set methods to update the attributes to the new values indicated by the user.
o Use the following code to update the OWNER database table. You will need
to make use of the Entity Manager (who manages the link between the
database and the List) to do these steps. If you are not sure of the name of
the Entity Manager, look in the Navigator under “Other Components”. The
Entity Manager in our example is called “PetAppPUEntityManger”. Here is
the update code:
PetAppPUEntityManger.getTransaction().begin();	
  
PetAppPUEntityManger.persist(selectedOwner);	
  
PetAppPUEntityManger.getTransaction().commit();	
  
If the interface JList does not immediately reflect the changes, you may have fogotten to
change the properties observable and modifiableWrapper of ownerList and petList to true
(See Step 2.8)
Jakkaphan Tangkuam…, 14/3/23 6:42 AM
Comment [15]: Note	
  that	
  the	
  task	
  does	
  NOT	
  
require	
  you	
  to	
  do	
  this.	
  
Jakkaphan Tangkuam…, 14/3/23 6:45 AM
Comment [16]: Note	
  that	
  this	
  step	
  is	
  NOT	
  
necessary	
  in	
  this	
  example,	
  since	
  you	
  have	
  bounded	
  
the	
  textfields	
  (and	
  the	
  other	
  components)	
  to	
  the	
  
selected	
  item	
  of	
  the	
  JList.	
  Since	
  the	
  binding	
  is	
  two	
  
way,	
  the	
  selected	
  object’s	
  attributes	
  would	
  have	
  
already	
  been	
  updated.	
  However,	
  if	
  your	
  component	
  
is	
  not	
  bounded,	
  you	
  will	
  need	
  to	
  call	
  the	
  set	
  
methods	
  explicitly.	
  
Jakkaphan Tangkuam…, 14/3/23 6:45 AM
Comment [17]: Note	
  that	
  this	
  line	
  is	
  strictly	
  not	
  
needed	
  since	
  the	
  object	
  is	
  already	
  binded	
  to	
  the	
  
table	
  and	
  as	
  such	
  the	
  record	
  in	
  the	
  table	
  will	
  already	
  
be	
  updated	
  once	
  you	
  commit.	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Insert New
On insert, your first aim is to create a new Owner object with the values given by the user.
The automatic Entity class creation process created two constructors Owner() and
Owner(int id). You should use the first one and then use set methods on the new object to
set the other attributes. Do not set the ID attribute as this will be automatically done by the
database.
Once you have created the new Owner object (assumed to be called newOwner in the code
below), you can similar code to above to persist the new object.
PetAppPUEntityManger.getTransaction().begin();	
  
PetAppPUEntityManger.persist(newOwner);	
  
PetAppPUEntityManger.getTransaction().commit();	
  
However, since ownerList does not update automatically, we will have to manually insert
the new object in it too by using the following code.
ownerList.add(newOwner);	
  
lstOwners.setSelectedValue(newowner,	
  true);	
  
The last line selected the newly inserted owner.
An alternative (but less efficient way) to update ownerList is to clear the list and then readd
all of the items using this code:
ownerList.clear();	
  
ownerList.addAll(ownerQuery.getResultList());	
  
lstOwners.setSelectedValue(newowner,	
  true);	
  
Deleting
Deleting operation involving entities linked via a relationship can be problematic and is
dependent on how the requirements. For example, what should happen when the user try
to delete an owner that has multiple pets linked to it. Should the pets be deleted as well?
The easiest way to handle this is to delete all the associated pets (maybe after a warning).
You can tell Java to do a cascade removal of any pet associated with an Owner on deletion
an owner by taking the following steps.
• In the Owner class, look for the declaration of the petList attribute.
• Above that should be a command starting with @ that looks like this:
@OneToMany(mappedBy	
  =	
  “ownerid”)	
  
	
   Add another key to it as follows:	
  
@OneToMany(mappedBy	
  =	
  “ownerid”,	
  cascade=CascadeType.REMOVE)	
  
Jakkaphan Tangkuam…, 14/3/23 6:48 AM
Comment [18]: Be	
  careful	
  if	
  you	
  choose	
  to	
  let	
  
the	
  user	
  enter	
  new	
  attributes	
  into	
  the	
  components	
  
that	
  are	
  bound	
  to	
  the	
  selected	
  item	
  of	
  the	
  JList.	
  
Make	
  sure	
  that	
  you	
  have	
  NO	
  selected	
  item	
  when	
  
you	
  add	
  a	
  new	
  object	
  ,	
  otherwise	
  you	
  will	
  be	
  editing	
  
both	
  the	
  attributes	
  of	
  the	
  selected	
  object	
  and	
  the	
  
new	
  object.	
  Use	
  clearSelection()	
  method	
  in	
  the	
  JList	
  
to	
  clear	
  any	
  selection.	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
You may need to do additional import (for the class CascadeType). Once this line is added,
the removal of any Owner will also trigger of automatic removal of his/her Pets.
Since the remove operation require a selected item in the JList, you will need to first make
sure you have a selection. Use the following code on the selectedOwner to remove the
Owner (and his/her Pets).
PetAppPUEntityManger.getTransaction().begin();	
  
PetAppPUEntityManger.remove(selectedOwner);	
  
PetAppPUEntityManger.getTransaction().commit();	
  
However, since ownerList does not update automatically, we will have to manually update it
using the following code.
ownerList.remove(selectedOwner);	
  
You may want to make the JList select another item (or you must manually reset the
attribute fields as they will still reflected the deleted owner’s attributes.
Also if the owner have any pets, all of the pets would have been removed too. However
petList would be out of date so you will need to remove the pets or just reset that list. It
might be easiest to do the following code:
petList.clear();	
  
petList.addAll(petQuery.getResultList());	
  
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  
Possible Errors
If you get errors you can not fix, it may be one of the following issues:
Persistence Exception: Database is already
connected
Only one program can be connected to the
database at the same time. Check that you
don’t already have a copy of your program
running or that Netbeans’ services tab don’t
already have a connected connection to the
same database.
Persistence Exception: Check for existence
of the lock file
Check the database folder for a .lck file. If you
copy the database when it is connected, you
would have copied the .lck file as well. This file
indicates to Netbeans that there is a
connection. If you have made sure there isn’t
any other connections, you may try to delete
this .lck file. (You may need to close Netbeans
to delete).
Persistence Exception: Some related SQL
errors
Check that your table and fields don’t have
spaces or any SQL or Java keywords (or any
illegal symbols) or that your linked foreign key
field values actually exist in the primary key
table.
Persistence Exception: Missing library (eg
Java persistence, Derby etc)
Copy the file derby.jar file (search for it on your
computer or download one from Moodle) and
put it in your project file (see Step 2.10).
No table listed in binding window: Make
sure you DB has a default schema (APP)
If you don’t have a default schema, the binding
window will not show any available database
tables. If this is the case, you did not tell
Netbeans that APP (or whichever schema you
created your table in) is the default schema. To
fix it you will need to connect back to the
database in the Services tab and set the
default schema. Once this is done, you will be
able to select the table.
Bound components are not updating after
persisting
Check that you only have one entity manager
as well as one list and one query object for
each entity class. If you have more than this,
you have done one of the steps too many
times (or have moved to a different computer
and then try to resume incorrectly). To fix this,
delete all the entity manager, lists and query
object and the JTables for each entity class –
then try and do all the binding again.
You have List of Strings (or int or other
types) instead of List of Entity objects
If for some reason, your List (of Owners or
Pets for example) contains Strings instead of
entity objects, then you have used a binding
expression in the JTable or JList. Do not use
binding expression because they will make the
underlying List a List of String. To fix this, you
will need to redo the binding task. See
previous answer for how to do this.
You get a List cannot expand in size error
when adding an item to a List
You list can only expand automatically if you
tick the modifiableWrapper in its properties
window. (See step 2.8). While you are there,
make sure observable is also checked. If you
are lucky, you will be able to fix this without
having to redo your project. Make sure you do
a clean-and-build after you tick though.
 
Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java
http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5 	
  
	
  

More Related Content

What's hot

Intelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulMert Çalışkan
 
Jdc 2010 - Maven, Intelligent Projects
Jdc 2010 - Maven, Intelligent ProjectsJdc 2010 - Maven, Intelligent Projects
Jdc 2010 - Maven, Intelligent ProjectsMert Çalışkan
 
Multiplatform Apps with Spring, Kotlin, and RSocket
Multiplatform Apps with Spring, Kotlin, and RSocketMultiplatform Apps with Spring, Kotlin, and RSocket
Multiplatform Apps with Spring, Kotlin, and RSocketVMware Tanzu
 
Spring Cloud Function: Where We Were, Where We Are, and Where We’re Going
Spring Cloud Function: Where We Were, Where We Are, and Where We’re GoingSpring Cloud Function: Where We Were, Where We Are, and Where We’re Going
Spring Cloud Function: Where We Were, Where We Are, and Where We’re GoingVMware Tanzu
 
Spring Boot on Amazon Web Services with Spring Cloud AWS
Spring Boot on Amazon Web Services with Spring Cloud AWSSpring Boot on Amazon Web Services with Spring Cloud AWS
Spring Boot on Amazon Web Services with Spring Cloud AWSVMware Tanzu
 
Introducing Spring Framework 5.3
Introducing Spring Framework 5.3Introducing Spring Framework 5.3
Introducing Spring Framework 5.3VMware Tanzu
 
An Introduction to Maven Part 1
An Introduction to Maven Part 1An Introduction to Maven Part 1
An Introduction to Maven Part 1MD Sayem Ahmed
 
Spring Data JDBC: Beyond the Obvious
Spring Data JDBC: Beyond the ObviousSpring Data JDBC: Beyond the Obvious
Spring Data JDBC: Beyond the ObviousVMware Tanzu
 
Game of Streams: How to Tame and Get the Most from Your Messaging Platforms
Game of Streams: How to Tame and Get the Most from Your Messaging PlatformsGame of Streams: How to Tame and Get the Most from Your Messaging Platforms
Game of Streams: How to Tame and Get the Most from Your Messaging PlatformsVMware Tanzu
 
Full Steam Ahead, R2DBC!
Full Steam Ahead, R2DBC!Full Steam Ahead, R2DBC!
Full Steam Ahead, R2DBC!VMware Tanzu
 
Setting Up Development Environment For Google App Engine & Python | Talentica
Setting Up Development Environment For Google App Engine & Python | TalenticaSetting Up Development Environment For Google App Engine & Python | Talentica
Setting Up Development Environment For Google App Engine & Python | TalenticaTalentica Software
 
jDays2015 - JavaEE vs. Spring Smackdown
jDays2015 - JavaEE vs. Spring SmackdownjDays2015 - JavaEE vs. Spring Smackdown
jDays2015 - JavaEE vs. Spring SmackdownMert Çalışkan
 
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...Jesse Gallagher
 
GWT training session 1
GWT training session 1GWT training session 1
GWT training session 1SNEHAL MASNE
 
不只自動化而且更敏捷的Android開發工具 gradle mopcon
不只自動化而且更敏捷的Android開發工具 gradle mopcon不只自動化而且更敏捷的Android開發工具 gradle mopcon
不只自動化而且更敏捷的Android開發工具 gradle mopconsam chiu
 
Continuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsContinuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsSunil Dalal
 

What's hot (20)

Intelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest Istanbul
 
Jdc 2010 - Maven, Intelligent Projects
Jdc 2010 - Maven, Intelligent ProjectsJdc 2010 - Maven, Intelligent Projects
Jdc 2010 - Maven, Intelligent Projects
 
Multiplatform Apps with Spring, Kotlin, and RSocket
Multiplatform Apps with Spring, Kotlin, and RSocketMultiplatform Apps with Spring, Kotlin, and RSocket
Multiplatform Apps with Spring, Kotlin, and RSocket
 
Spring Cloud Function: Where We Were, Where We Are, and Where We’re Going
Spring Cloud Function: Where We Were, Where We Are, and Where We’re GoingSpring Cloud Function: Where We Were, Where We Are, and Where We’re Going
Spring Cloud Function: Where We Were, Where We Are, and Where We’re Going
 
Spring Boot on Amazon Web Services with Spring Cloud AWS
Spring Boot on Amazon Web Services with Spring Cloud AWSSpring Boot on Amazon Web Services with Spring Cloud AWS
Spring Boot on Amazon Web Services with Spring Cloud AWS
 
Java and XPages
Java and XPagesJava and XPages
Java and XPages
 
Introducing Spring Framework 5.3
Introducing Spring Framework 5.3Introducing Spring Framework 5.3
Introducing Spring Framework 5.3
 
An Introduction to Maven Part 1
An Introduction to Maven Part 1An Introduction to Maven Part 1
An Introduction to Maven Part 1
 
Spring Data JDBC: Beyond the Obvious
Spring Data JDBC: Beyond the ObviousSpring Data JDBC: Beyond the Obvious
Spring Data JDBC: Beyond the Obvious
 
Game of Streams: How to Tame and Get the Most from Your Messaging Platforms
Game of Streams: How to Tame and Get the Most from Your Messaging PlatformsGame of Streams: How to Tame and Get the Most from Your Messaging Platforms
Game of Streams: How to Tame and Get the Most from Your Messaging Platforms
 
Continuous delivery-with-maven
Continuous delivery-with-mavenContinuous delivery-with-maven
Continuous delivery-with-maven
 
Full Steam Ahead, R2DBC!
Full Steam Ahead, R2DBC!Full Steam Ahead, R2DBC!
Full Steam Ahead, R2DBC!
 
Setting Up Development Environment For Google App Engine & Python | Talentica
Setting Up Development Environment For Google App Engine & Python | TalenticaSetting Up Development Environment For Google App Engine & Python | Talentica
Setting Up Development Environment For Google App Engine & Python | Talentica
 
jDays2015 - JavaEE vs. Spring Smackdown
jDays2015 - JavaEE vs. Spring SmackdownjDays2015 - JavaEE vs. Spring Smackdown
jDays2015 - JavaEE vs. Spring Smackdown
 
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
 
GWT training session 1
GWT training session 1GWT training session 1
GWT training session 1
 
Migrating from MFC to Qt
Migrating from MFC to QtMigrating from MFC to Qt
Migrating from MFC to Qt
 
不只自動化而且更敏捷的Android開發工具 gradle mopcon
不只自動化而且更敏捷的Android開發工具 gradle mopcon不只自動化而且更敏捷的Android開發工具 gradle mopcon
不只自動化而且更敏捷的Android開發工具 gradle mopcon
 
Continuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsContinuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applications
 
Maven basics
Maven basicsMaven basics
Maven basics
 

Viewers also liked

JPQL/ JPA Activity 2
JPQL/ JPA Activity 2JPQL/ JPA Activity 2
JPQL/ JPA Activity 2SFI
 
Web Services Part 2
Web Services Part 2Web Services Part 2
Web Services Part 2patinijava
 
JPQL/ JPA Activity 3
JPQL/ JPA  Activity 3JPQL/ JPA  Activity 3
JPQL/ JPA Activity 3SFI
 
Patni Hibernate
Patni   HibernatePatni   Hibernate
Patni Hibernatepatinijava
 
How to bake reactive behavior into your Java EE applications
How to bake reactive behavior into your Java EE applicationsHow to bake reactive behavior into your Java EE applications
How to bake reactive behavior into your Java EE applicationsOndrej Mihályi
 
Continuous integration practices to improve the software quality
Continuous integration practices to improve the software qualityContinuous integration practices to improve the software quality
Continuous integration practices to improve the software qualityFabricio Epaminondas
 
Introduction to developing modern web apps
Introduction to developing modern web appsIntroduction to developing modern web apps
Introduction to developing modern web appsFabricio Epaminondas
 
Quickstart for continuous integration
Quickstart for continuous integrationQuickstart for continuous integration
Quickstart for continuous integrationFabricio Epaminondas
 
FinelyMe-JustFit Intro
FinelyMe-JustFit IntroFinelyMe-JustFit Intro
FinelyMe-JustFit IntroCheng Ta Yeh
 
Web Services Part 1
Web Services Part 1Web Services Part 1
Web Services Part 1patinijava
 
Spring Transaction
Spring TransactionSpring Transaction
Spring Transactionpatinijava
 
Continuous testing in agile projects 2015
Continuous testing in agile projects 2015Continuous testing in agile projects 2015
Continuous testing in agile projects 2015Fabricio Epaminondas
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring DataArturs Drozdovs
 
Introduction To Spring
Introduction To SpringIntroduction To Spring
Introduction To SpringIlio Catallo
 

Viewers also liked (20)

JPQL/ JPA Activity 2
JPQL/ JPA Activity 2JPQL/ JPA Activity 2
JPQL/ JPA Activity 2
 
15 jpa
15 jpa15 jpa
15 jpa
 
Web Services Part 2
Web Services Part 2Web Services Part 2
Web Services Part 2
 
JPQL/ JPA Activity 3
JPQL/ JPA  Activity 3JPQL/ JPA  Activity 3
JPQL/ JPA Activity 3
 
Working with jpa
Working with jpaWorking with jpa
Working with jpa
 
Ejb5
Ejb5Ejb5
Ejb5
 
Patni Hibernate
Patni   HibernatePatni   Hibernate
Patni Hibernate
 
15 jpaql
15 jpaql15 jpaql
15 jpaql
 
How to bake reactive behavior into your Java EE applications
How to bake reactive behavior into your Java EE applicationsHow to bake reactive behavior into your Java EE applications
How to bake reactive behavior into your Java EE applications
 
Continuous integration practices to improve the software quality
Continuous integration practices to improve the software qualityContinuous integration practices to improve the software quality
Continuous integration practices to improve the software quality
 
Introduction to developing modern web apps
Introduction to developing modern web appsIntroduction to developing modern web apps
Introduction to developing modern web apps
 
Quickstart for continuous integration
Quickstart for continuous integrationQuickstart for continuous integration
Quickstart for continuous integration
 
FinelyMe-JustFit Intro
FinelyMe-JustFit IntroFinelyMe-JustFit Intro
FinelyMe-JustFit Intro
 
Web Services Part 1
Web Services Part 1Web Services Part 1
Web Services Part 1
 
Designing Scalable Applications
Designing Scalable ApplicationsDesigning Scalable Applications
Designing Scalable Applications
 
Spring Transaction
Spring TransactionSpring Transaction
Spring Transaction
 
Continuous testing in agile projects 2015
Continuous testing in agile projects 2015Continuous testing in agile projects 2015
Continuous testing in agile projects 2015
 
Spring Data JPA
Spring Data JPASpring Data JPA
Spring Data JPA
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring Data
 
Introduction To Spring
Introduction To SpringIntroduction To Spring
Introduction To Spring
 

Similar to JPQL/ JPA Activity 1

Sql server 2012 tutorials writing transact-sql statements
Sql server 2012 tutorials   writing transact-sql statementsSql server 2012 tutorials   writing transact-sql statements
Sql server 2012 tutorials writing transact-sql statementsSteve Xu
 
Sql interview question part 8
Sql interview question part 8Sql interview question part 8
Sql interview question part 8kaashiv1
 
z/OSMF Workflow Editor Lab - Try it out on your z/OSMF system
z/OSMF Workflow Editor Lab - Try it out on your z/OSMF systemz/OSMF Workflow Editor Lab - Try it out on your z/OSMF system
z/OSMF Workflow Editor Lab - Try it out on your z/OSMF systemMarna Walle
 
Scanned by CamScannerModule 03 Lab WorksheetWeb Developmen.docx
Scanned by CamScannerModule 03 Lab WorksheetWeb Developmen.docxScanned by CamScannerModule 03 Lab WorksheetWeb Developmen.docx
Scanned by CamScannerModule 03 Lab WorksheetWeb Developmen.docxanhlodge
 
Intro to Talend Open Studio for Data Integration
Intro to Talend Open Studio for Data IntegrationIntro to Talend Open Studio for Data Integration
Intro to Talend Open Studio for Data IntegrationPhilip Yurchuk
 
Handling Database Deployments
Handling Database DeploymentsHandling Database Deployments
Handling Database DeploymentsMike Willbanks
 
Oracle EBS 12.1.3 : Integrate OA Framework BC4J components within java concur...
Oracle EBS 12.1.3 : Integrate OA Framework BC4J components within java concur...Oracle EBS 12.1.3 : Integrate OA Framework BC4J components within java concur...
Oracle EBS 12.1.3 : Integrate OA Framework BC4J components within java concur...Amit Singh
 
Access tips access and sql part 3 practical examples
Access tips  access and sql part 3  practical examplesAccess tips  access and sql part 3  practical examples
Access tips access and sql part 3 practical examplesquest2900
 
Data Base Testing Interview Questions
Data Base Testing Interview QuestionsData Base Testing Interview Questions
Data Base Testing Interview QuestionsRita Singh
 

Similar to JPQL/ JPA Activity 1 (20)

Database Management Assignment Help
Database Management Assignment Help Database Management Assignment Help
Database Management Assignment Help
 
Instant DBMS Homework Help
Instant DBMS Homework HelpInstant DBMS Homework Help
Instant DBMS Homework Help
 
Custom JSF components
Custom JSF componentsCustom JSF components
Custom JSF components
 
Sql server 2012 tutorials writing transact-sql statements
Sql server 2012 tutorials   writing transact-sql statementsSql server 2012 tutorials   writing transact-sql statements
Sql server 2012 tutorials writing transact-sql statements
 
Pl lab solution
Pl lab solutionPl lab solution
Pl lab solution
 
Sql interview question part 8
Sql interview question part 8Sql interview question part 8
Sql interview question part 8
 
Ebook8
Ebook8Ebook8
Ebook8
 
z/OSMF Workflow Editor Lab - Try it out on your z/OSMF system
z/OSMF Workflow Editor Lab - Try it out on your z/OSMF systemz/OSMF Workflow Editor Lab - Try it out on your z/OSMF system
z/OSMF Workflow Editor Lab - Try it out on your z/OSMF system
 
Scanned by CamScannerModule 03 Lab WorksheetWeb Developmen.docx
Scanned by CamScannerModule 03 Lab WorksheetWeb Developmen.docxScanned by CamScannerModule 03 Lab WorksheetWeb Developmen.docx
Scanned by CamScannerModule 03 Lab WorksheetWeb Developmen.docx
 
Mule data bases
Mule data basesMule data bases
Mule data bases
 
Intro to Talend Open Studio for Data Integration
Intro to Talend Open Studio for Data IntegrationIntro to Talend Open Studio for Data Integration
Intro to Talend Open Studio for Data Integration
 
Handling Database Deployments
Handling Database DeploymentsHandling Database Deployments
Handling Database Deployments
 
How java works
How java worksHow java works
How java works
 
How java works
How java worksHow java works
How java works
 
Oracle EBS 12.1.3 : Integrate OA Framework BC4J components within java concur...
Oracle EBS 12.1.3 : Integrate OA Framework BC4J components within java concur...Oracle EBS 12.1.3 : Integrate OA Framework BC4J components within java concur...
Oracle EBS 12.1.3 : Integrate OA Framework BC4J components within java concur...
 
Stored procedure tunning
Stored procedure tunningStored procedure tunning
Stored procedure tunning
 
Class 1 blog
Class 1 blogClass 1 blog
Class 1 blog
 
Access tips access and sql part 3 practical examples
Access tips  access and sql part 3  practical examplesAccess tips  access and sql part 3  practical examples
Access tips access and sql part 3 practical examples
 
Data Base Testing Interview Questions
Data Base Testing Interview QuestionsData Base Testing Interview Questions
Data Base Testing Interview Questions
 
Class 1
Class 1Class 1
Class 1
 

Recently uploaded

Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 

Recently uploaded (20)

Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 

JPQL/ JPA Activity 1

  • 1.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     DATA AWARE TASK Step by Step Guide for Java Version 0.5 J. Tangkuampien Open-Licence 2014 J. Tangkuampien http://creativecommons.org/licenses/by-nc-sa/2.5/za/ Based partly on scenario and data from the IEB matric practical paper – November 2009
  • 2.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Task 1 – Database Design & Creation Required: Excel spreadsheet containing normalised database (2 tables each with primary key and a one-to-many relationships ie. Foreign key à primary key link) Output: Java DB database that reflect the tables contained in the spreadsheet. We are going to be using the Pet-Owner example in these descriptions. This is a one-to- many relationship where one pet only have one owner but one owner can have many pets. This results in the PET table containing a foreign key field OWNERID which is linked to the primary key (also named OWNERID) of the OWNER table. Important: When choosing designing your database: • Make sure that each table has a numbered primary key • The names of your database and tables are in capitals and contains no spaces, no SQL and Java reserved keywords or any illegal characters. • The foreign key field values all exists as primary key fields in the related table. Step 1.1 – Decide on type of column for the two tables. Since the PET table contains link to OWNER, we should create the OWNER table first before the PET table. Step 1.2 – Create a new JavaDB Database by going to the “Services” tab (Window à Services if you can’t see it. In the tab, expand “Databases”, and choose “Create Database”. In the dialog box that pops up, choose the database’s name, leave the Username and Password as blank – despite the on-screen recommendation. You may choose a password here but it will not be possible to recover your password if you forget it so it is best to leave everything as blank. Take note of the database location (You can click “Properties” to change this.) Jakkaphan Tangkuam…, 14/3/23 5:31 AM Comment [1]: It  is  important  that  there  is  a   primary  key  field.  You  can  not  generate  entity  class   from  a  table  without  a  primary  key  field.   Jakkaphan Tangkuam…, 14/3/23 5:42 AM Comment [2]: SQL  reserved  words  will  turn   BLUE  in  the  SQL  command  execution  window  (see   Step  1.4  on  how  to  get  it).  It  is  possible  to  override   and  use  reserved  words  as  table  or  column  names  if   you  put  them  in  quotes.  Do  NOT  do  this  because   things  will  break  later  on.  To  check  for  Java  reserved   word,  type  it  in  Netbeans  file  edit  windows  and  see   if  it  is  BLUE.  
  • 3.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Step 1.3 – Once the database is created, you will need to connect to it. This can be done by locating the connection which should be just below the “Driver” folder. The one you created should end with the name of the database. Right-click on it and choose connect. A username/password window may pop up at this stage. Just click ok as your password is blank. Step 1.4 – We will now create a new table in the “APP” schema using SQL. You should make the “APP” schema the default one by right-clicking and choose “Set as Default Schema”. If APP is already bold (see below) then it is already default. To create a new table in APP using SQL, right-clicking on the “Tables” folder (or APP) and choose execute command (Do not choose Create Table). This will open up an edit window on the right. Type in the appropriate create command. (VARCHAR is text with the number between the brackets indicating its size). Run the command by clicking on the “run SQL button” (not the same as the run project button). If there are any errors, read the error message and correct the command. Once you can run this successfully, save the SQL statement to a file in case you need to recreate the table for Jakkaphan Tangkuam…, 14/3/23 5:36 AM Comment [3]: It  is  possible  to  use  the  GUI  to   create  table,  but  certain  functions  such  as  creating  a   auto-­‐numbered  fields  are  only  available  via  SQL   currently.  It  is  better  to  create  using  SQL  in  any   case,  because  you  will  be  able  to  save  the  SQL  for   back-­‐up  purposes.  
  • 4.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     whatever reason. Clear the command window after you have done this. Note that you can choose to start from a different number and not always from 1.
  • 5.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Step 1.5 – You will need to create SQL commands to insert data into your table. The easiest way to do this is via Excel as shown below. Do this with one line first to make sure that this works. Also make sure your command ends with semi-colon so you will be able to have multiple statements. Copy the command to the SQL window. You will notice that Excel has automatically add tabs in between the cells. You can do a search and replace for tab by using Edità Replace (or Ctrl-H). Search for backslash t (see below) and leave the replace with blank. You will need to turn on use regular expression to make this work. To do that, click this button. If you have done this correctly, all tabs will be highlighted – click replace all. All tabs should now be gone from the command. Run it and make sure that it works. Make the necessary correction to the first row before copy and pasting the commands to the rest of the sheet. Copy and paste the commands (except the first since you have done that) and follow the same procedure as before to get rid of the tabs. Jakkaphan Tangkuamp…, 14/4/6 8:37 AM Comment [4]: Alternatively  you  can  use  the   concatenation  command  in  Excel  to  create  a  cell   with  all  the  others  concatenated  together.  This  will   save  you  from  having  to  get  rid  of  the  tabs  as  shown   previously.     You  can  also  make  use  of  the  CALL   SYSCS_UTIL.SYSCS_IMPORT_TABLE  command  to   import  data  from  a  csv  file.  
  • 6.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Step 1.6 – Create the other tables in the same way. Remember to match the type of any foreign key field with that of the corresponding primary key. In our example, OwnerID is an INTEGER. Other types you may want to use are DOUBLE, DATE and BOOLEAN. All of these can be used standalone with no argument provided (like INTEGER) Step 1.7 – Once all the tables are created, run the command below to link the keys. Note that you should alter the table containing the foreign key (line 1). Line 3 refers to the foreign key fields in the table you are altering and line 4 contains the references to the primary key – REFERENCES Table (primary key). Test that the relationship is working by inserting a new Pet with an non-existent ownerID and delete an Owner record that a Pet linked to it. These action should not be possible. Step 1.8 – Disconnect and delete the connection entry in the services list. We will be create a new one in the next task. Note that deleting the connection does not delete the database. You can still find the database folder by going to the database location folder. It is recommended that you also delete any other connections at this point so that you are not confused by which one to choose at a later stage. Table  with  Foreign  key   Table  with  Primary  key   Foreign  key  field   Primary  key  field   Name  of  constraint  
  • 7.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Task 2 – Linking the Database to a Java Application These steps should be done all in one go in order to ensure that the projects are transferable to other locations. We will now create Netbeans application and then add an embedded database to it. We will be using the PetDB we created earlier. Step 2.1 – Create a new Netbeans Project – Java Application is fine. Locate the PetDB database folder in your copy. Copy the PetDB database folder into the project folder. The project folder is the one listed under properties. You should also be able to see other folders (nbproject, src) in the project folder. You will need the exact path to the database folder (including the folder name – PETDB in this example) in the next step. Step 2.2 – In the service tab, under driver, right-click on “Java DB (Embedded)” and then “Connect Using ..”. In the window that pops up, enter the exact path to your database folder (including the database name) and click “Test Connection”. If your connection is successful, you will see “Connection Succeeded” on the bottom left. If not, check that you have enter the correct path (You must indicate the database folder and not the folder that contains the database folder. The correct database folder will contain ‘log’ and ‘seg0’ folders. Also check that you have not made a spelling mistake. Once the test is successful, click “Finish” In the next window that pops up, make sure “APP” is selected as the default schema. If you did not do this at this stage, you can at a later stage make APP the default one as before (See Step 1.4).
  • 8.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Step 2.3 – We will now create entity classes from the database. To do this, right click on the package icon (see below) of your project and choose New à Entity Classes from Database In the window that pops up, make sure the Database connection is the one you have just created in step 2.2. The correct entry should NOT link to localhost. After making sure that the database selection is correct, you should see your tables listing in ‘Available Tables’ – add all the tables to your solution (Click “Add All >>”) You may change the name of the entity classes that will be generated here if necessary. For example, if you have named the table “OWNERTB”, you may want the class to be called “Owner” instead of “Ownertb”. Jakkaphan Tangkuam…, 14/3/23 6:01 AM Comment [5]: Choosing  an  incorrect  connection   here  will  result  in  your  program  not  working  and  it   will  be  rather  difficult  to  correct  this  without   starting  again  from  this  step.     Jakkaphan Tangkuam…, 14/3/23 6:03 AM Comment [6]: This  will  ensure  that  the  class  you   created  from  the  table  has  more  sensible  name.  It  is   more  sensible  for  each  PET  to  have  an  OWNER  than   for  each  PETTB  to  have  an  OWNERTB.  Note  that   most  assignments  including  your  main  PAT  requires   that  you  name  everything  sensibly.  
  • 9.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     The following changes are recommended for the Mapping Options: Use java.util.List as collection Type. This will result in each Owner object having a List of Pets that he/she owns. Uncheck “Use Column Names in Relationships”. This will generate an attribute of type Owner in the Pet class called Owner instead of Ownerid. (This name choice will also be in the get/set methods. This choice makes more sense as you will actually beworking with the action Owner object and not its ids.) After this, you should be able to see the two new entity classes listed under the project package. Have a look at what Netbeans generated. You should get the same attributes as the database fields as well as constructor, get, set and toString methods. Note that the computer did not generate a constructor that takes in all attributes. IMPORTANT: Note about boolean type when using Netbeans 7.3 & 7.4 When one of the type is a boolean, Netbeans 7.3 and 7.4 (This is fixed in 8.0) will errornously create that attribute as type “Serializable” instead of boolean. You will need to edit the generated Entity class file and replace the attibute type “Serializable” with type “boolean” (with small b). Also modify the get and set methods to reflect this. Do not just do a search and replace all “Serializable” with “boolean” – there are other instances of “Serializable” that must stay. Do a clean and build before continuing.
  • 10.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Step 2.4 – The next step is to create a JFrame Form that will have all the GUI elements. Add a JTabbedPane to the JFrame. Rename the added JTabbedPane according to convention (i.e. tbpTabs or something similar). You can then drag and drop a JPanel on to the JTabbedPane. This will create new tab. Rename the added JPanel and change its text to “Owners”. We will be using this tab to display all of the owner information in a table form. Add another JPanel to create a new tab, but be careful not to drop the JPanel on to the existing tab, you must drop it onto the JTabbedPane so drop it here and NOT here Make sure you have 4 tabs as shown above. Remember to rename each JPanel as you add them. Jakkaphan Tangkuam…, 14/3/23 6:08 AM Comment [7]: Note  that  the  Java  classes   corresponding  to  the  components  in  the  pallete  are   all  actually  named  with  J  in  front.  In  these  notes,  all   the  interface  components  are  referred  to  using  its   Java  class  name  i.e.  JPanel  instead  of  Panel,  JTable   instead  of  Table,  JList  instead  of  List  etc.  
  • 11.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Step 2.5 – We will now work on the first tab which will display all of the owner information in a table form. To do this, go back to the first tab and drag and drop a new JTable on to its JPanel. Resize the JTable so that it takes up all available space in the JPanel. Also rename this JTable appropriately. This JTable’s content will be bounded to the OWNER table in the database. This means that the content of the JTable will always reflect the content of the OWNER table in the database. To do this, right click anywhere on the interface table and choose “Bind”. We are going to bind all elements to the database table, so choose “elements”. You will then see a Bind dialog box, choose “Import Data to Form”. In the next popup window, choose the correct database connection (be careful to choose the same one you used to generate the Entity classes). In the Database Table drop down list, choose the correct table (OWNER in this example). Click “OK” to move on.
  • 12.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     You can now choose which fields to be included; typically you will want to add all fields. For some reason the list is always displayed in reverse so you may need to move things up and down to choose the correct order. Click “OK” once you are happy with the ordering. Note the petList field that will contain all the pets that belong to this Owner. Step 2.6 – We will now attempt to run the program to see if the interface table has been populated correctly. If you just see a “build successful” message without the JFrame popping up it may be because you asked Netbeans to create a main class for you. If this is the case, you will need to delete that class (it should have an empty main method in it). When you run the program again, it will ask you for the new main class to be use – choose the JFrame class. Jakkaphan Tangkuam…, 14/3/23 6:12 AM Comment [8]: It  is  shown  as  PetCollection  in  the   diagram.  
  • 13.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     The program should attempt to start the frame and show a “PersistenceException” in the process. This is because Netbeans itself is connected to the embedded database (by definition and embedded database is only accessible by one program at a time – usually by the program (or any of its threads) that it is embedded in). To correct this error, you will need to go back to the services tab and disconnect Netbeans from the database. Every time you ask Netbeans to link to the database (eg to Bind or generate entity classes) – Netbeans will make a connection to the database. So make sure to check for disconnection as Netbeans may have made the connection previously. Note that you will also get the same error if you attempt to run a second instance of your program. Once run successfully, you should see all the information on each owner. Note that the PetList field does not contain the list as yet. Jakkaphan Tangkuam…, 14/3/23 6:16 AM Comment [9]: This  is  because  you  choose  the   default  fetch  type  when  generating  the  entity   classes.  If  you  want  the  list  to  be  visible  at  the  start,   you  could  have  chosen  eager  as  the  fetch  type.   However,  this  does  NOT  make  a  difference  to  your   task  and  is  not  worth  going  back  to  change  it.  Lazy   fetch  type  means  that  the  content  of  the  list  will   only  be  fetched  whenever  that  object  is  requested   and  not  right  at  the  start.  You  can  see  the  reason   why  you  may  not  want  to  fetch  everything  at  the   start  if  your  database  table  contains  thousands  of   records.  
  • 14.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Step 2.7 – You will now add another JTable to the PETS tab. (Drag and drop JTable to tab, rename, right click à Bind à Elements. Choose the correct connection (same one as before) and choose the PET table, then add and reorder column). When you run again (don’t forget to disconnect), the Pet JTable should be populated. You can edit to the toString method of the Owner class to make it output the name and surname instead of the default one seen above.
  • 15.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Step 2.8 - The binding process created 5 new components in the JFrame. Look for them in the Navigator.  Two of them are Lists which are the data structures behind the two JTables. We will need to make these Lists updated automatically when the database changes. To do this, right click on each list and choose ‘Properties’. In the properties window, tick both ‘modifiableWrapper’ and ‘observable’. Do this for the List that is linked to the other JTable as well. Do a clean a build and you should see no changes to the JTables. Step 2.9 – Test that you are able to edit the information in each cell by clicking twice on the cell. The changes should be reflect but does not persist across restart of the program. This is fine as we have not yet done the persistence part. We will do this in the next task. Step 2.10 – After you have bounded all each database table to a JTable, delete the Connection from the Database section in the Services tab. This is so that you do not make a mistake of choosing this in future. Make sure no other connection exists. Jakkaphan Tangkuam…, 14/3/23 6:18 AM Comment [10]: This  will  allow  the  list  to  be   modified  as  the  interface  changes.   Jakkaphan Tangkuam…, 14/3/23 6:18 AM Comment [11]: This  will  allow  the  content  of  the   List  to  be  observable  so  the  linked  interface(s)  can   be  updated  accordingly.  
  • 16.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Step 2.11 – Recall that the database folder information was hard-linked to the DB folder by specific path. This means that the project is currently not running when moved to a different computer. This last step will make the path relative so that you can run the project in other location. To do this, expand the “META-INF” folder found within the project folder. In that folder, open the file “persistence.xml”, click on the source tab. In the source edit the url property and remove any absolute path – leaving with just the name of the database Test that your program still runs correctly.
  • 17.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     You should also copy derby.jar file to your project folder and then add this file to the library in your project. This is necessary if your Netbeans is not the exact same version as the one used at school. If you can’t find a copy of derby.jar – search for one in your computer. There must be one if you connection is successful. Copy this file to your project folder i.e. in the folder with build, nbproject, src etc (see right). After that, right-click on “Library” in your project tab in Netbeans and choose add JAR/Folder. Select derby.jar from the right window. Make sure you choose to reference as “Relative Path”. Even if you have done this step, opening your project in other computer initially may result in a missing reference error. Your project should still work without resolving this error. You can also resolve it by telling Netbeans where derby.jar is (it should be in the project folder because you just copied it there).
  • 18.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Task 3 – Other interfaces Before we go on with this task – note that by binding to the two database tables previously, Netbeans has created for us to data structures (of type List) i.e. a List of Owners and a List of Pets. You can see them in the Navigator window, under other components. (ownerList and petList). Note that you should only have one of each. If you have more than one then you may have done one of the previous steps more than once. These Lists are linked to the database tables and should be used from this point on to bind additional interface components. DO NOT bind any additional component via the “Import Data to Form” button. Instead, you should select either ownList or petList from the drop down list as the binding source. Step 3.1 – We will start off with the “edit Owner” tab so that it ends up looking as shown below. The component of the left is an interface list (JList) that will be bound to the data structure List ownerList (which in turn is bound to the database table OWNER). Selecting an owner from that JList will show that owner’s attributes on the right. The component next to Pets is also a JList. The <<, <, > and >> buttons will take the user to the first, previous, next and last item on the left JList respectively. The other buttons are self-explanatory. Start off by adding, positioning and chaning the text on the components as shown. Also remember to name each component appropriately (eg. txfFirstname, txfLastName, btnAddNewOwner etc.)
  • 19.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Step 3.2 – We will now bind the JList to the ownerList as follows. Right click on the JList and choose Bind à elements (all of the elements in the list will reflect the content of ownerList). DO NOT click on “Import Data to Form” and rebind the database table. Once bound, you can run the program and should see the following. The toString method is used for display as before. `Note that there are now two interface components (the JTable in the OwnersTab and the JList in this tab) that are bound to the same ownerList which in turn is bound to the database table OWNER. The JList in the above tab is named “lstOwners”. The diagram to the right summarises the link between the ownerList (JList User Interface component), lstOwners (List data structure) and OWNER table (database). For the rest of the document, the data structure list will be referred to as List (or List<Owner>) and the interface list will be referred to as JList. Netbeans normally name your data structure list as <name of entity class> followed by List. Your interface List (JList) should be named with lst prefix as recommended. Jakkaphan Tangkuam…, 14/3/23 6:30 AM Comment [12]: If  you  do  this  again,  you  will  get   another  EntityManager,  List  and  Query  objects   associated  with  this  JList.  Do  NOT  redo  that  step   (unless  you  really  want  new  copies  of  those  three   things)   Jakkaphan Tangkuam…, 14/3/23 6:31 AM Comment [13]: It  is  possible  to  use  Binding   Expression  in  the  binding  window  to  choose  exactly   what  the  JList  will  show.  Do  NOT  do  this  because  if   you  do,  the  JList  will  be  linked  to  a  List  of  Strings   instead  of  a  the  List  of  Owner  objects.  
  • 20.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Step 3.3 – The next step is to bind all the components on the right to reflect the attributes of the selected owner on the left JList. We will start with the Owner First name Text field. Right-click on the text field and choose “Bind” and then “Text” The text will be bound to the selected item of the JList (and not ownerList or any other List or JList) – so select the list (lstOwners in our case) as the Binding Source. In the binding Expression, navigate to “SelectedElement” and “ownerfirstname”. Once bound, run the program and check that the first name changes as you move up and down the list. Do the same thing for the other text fields. You should also bound the Pet JList to the petList attribute of “SelectedElement” as well. Jakkaphan Tangkuam…, 14/3/23 6:36 AM Comment [14]: It  is  important  to  choose  the   right  thing  to  bind  to  -­‐  List  vs  JList.  The  general  rule   is  to  think  about  whether  or  not  you  need  the   selected  item.  Only  a  JList  knows  which  item  is   currently  selected  –  so  if  you  need  to  know  which   item  is  selected  currently,  use  a  JList.  If  you  don’t   need  to  know,  use  the  List.  
  • 21.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Run the program and make sure everything works as expected. Use the following components to bind to the different data types: • Single line String – use JTextField • Multiple line String – use JTextArea (JTextPane if the user shouldn’t be able to change it) • double or ints – use JSpinner (with model set as numbers) • Date – use JFormattedTextField or JSpinner (with model set as Date) • boolean – use JCheckBox • List of objects: o Use JComboBox (if user can select only one item – useful for one to many relationship – eg. In Pet window where there can only be one owner). o Use JList (if user can select multiple items – useful for the other side of the relationship – eg. In Owner where they can have many pets.) We will now add code to the Navigational and Search buttons. We will deal with the other buttons in the next task.
  • 22.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Step 3.4 – Navigational Buttons Code the action for the navigational buttons. The following points may come in handy: A List<Owner> allows you to work with the data in the List. Use the following methods: • get(int  pos) – will give you back the Object (Owner in our case) at the given position. • size() will give you the size of the List at the moment. A JList allows you to get and set selected item on the JList. Use the following methods on a JList • getSelectedIndex() will give you the index (position) of the selected item (it starts from 0). • getSelectedValue() will give you the object (but you will have to cast it to the correct class e.g Owner  selectedOwner  =  (Owner)lstOwners.getSelectedValue();   • setSelectedIndex(int  pos) – let you set the selected item to the given position. However, the list does not autoscroll to that item (see next one for how to do this). • setSelectedValue(Object  o,  boolean  autoscroll) will let you select an item and also allow you to scroll to that position. You will need to locate the object first which can only be done via the List ownerList. For example, this code will set the selection to the first item on the JList. Owner  firstOwner  =  ownerList.get(0);   lstOwners.setSelectedValue(firstowner,  true);   Step 3.5 – Add code to the search button to allow items matching the search criterion to be selected. To fit in with the task requirement, you only need to search for one attributes of the entity class (eg. Search for last name of the owner). You can do the search by using a loop and testing if each object matches the given criterion. You only need to select just ONE matching object, so the first one you find is fine. Use setSelectedValue method to choose the matching object. Step 3.6 – Do a similar thing for the “Edit Pets” tab. We will do the add, edit and remove buttons in the next task.
  • 23.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Task 4 – Update, Remove, Add and Search Buttons You will now work on the Update, add and remove buttons in the “Edit Owners” tab. Update Update operation will depend on whether or not there is a selected item in the JList. Your code should check for this before attempting update (or you can set up your interface so it is never possible to update while no Owner is selected). There are many ways to do update but you should aim to the user to not be able to move away from the selected item (or delete or add new item for that matter) while he is editing. It may be easier to: • Disable the attribute fields by default until the user click the update button. • Once clicked, the fields should then be editable and the update button’s label changed to “Commit”. The other buttons (navigational, add and remove) should be disabled so that the user can not move away or attempt to do other operation. • The user can then edit the field and click on “Commit” (labelled “Update” previously). On commit, you program will do the reverse of the previous step (e.g. disable the fields, enable the list and the other buttons as well as change the label of the Update button back. Note that since the text fields are already bounded to the selected object, any changes made to it already updates the selected object. All this is left is to make sure the object is changed in the database. Here are some hints on how to do this: o Use getSelectedValue() method on the JList to locate the selected Owner (You will need to cast as getSelectedValue() returns an Object) and then use set methods to update the attributes to the new values indicated by the user. o Use the following code to update the OWNER database table. You will need to make use of the Entity Manager (who manages the link between the database and the List) to do these steps. If you are not sure of the name of the Entity Manager, look in the Navigator under “Other Components”. The Entity Manager in our example is called “PetAppPUEntityManger”. Here is the update code: PetAppPUEntityManger.getTransaction().begin();   PetAppPUEntityManger.persist(selectedOwner);   PetAppPUEntityManger.getTransaction().commit();   If the interface JList does not immediately reflect the changes, you may have fogotten to change the properties observable and modifiableWrapper of ownerList and petList to true (See Step 2.8) Jakkaphan Tangkuam…, 14/3/23 6:42 AM Comment [15]: Note  that  the  task  does  NOT   require  you  to  do  this.   Jakkaphan Tangkuam…, 14/3/23 6:45 AM Comment [16]: Note  that  this  step  is  NOT   necessary  in  this  example,  since  you  have  bounded   the  textfields  (and  the  other  components)  to  the   selected  item  of  the  JList.  Since  the  binding  is  two   way,  the  selected  object’s  attributes  would  have   already  been  updated.  However,  if  your  component   is  not  bounded,  you  will  need  to  call  the  set   methods  explicitly.   Jakkaphan Tangkuam…, 14/3/23 6:45 AM Comment [17]: Note  that  this  line  is  strictly  not   needed  since  the  object  is  already  binded  to  the   table  and  as  such  the  record  in  the  table  will  already   be  updated  once  you  commit.  
  • 24.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Insert New On insert, your first aim is to create a new Owner object with the values given by the user. The automatic Entity class creation process created two constructors Owner() and Owner(int id). You should use the first one and then use set methods on the new object to set the other attributes. Do not set the ID attribute as this will be automatically done by the database. Once you have created the new Owner object (assumed to be called newOwner in the code below), you can similar code to above to persist the new object. PetAppPUEntityManger.getTransaction().begin();   PetAppPUEntityManger.persist(newOwner);   PetAppPUEntityManger.getTransaction().commit();   However, since ownerList does not update automatically, we will have to manually insert the new object in it too by using the following code. ownerList.add(newOwner);   lstOwners.setSelectedValue(newowner,  true);   The last line selected the newly inserted owner. An alternative (but less efficient way) to update ownerList is to clear the list and then readd all of the items using this code: ownerList.clear();   ownerList.addAll(ownerQuery.getResultList());   lstOwners.setSelectedValue(newowner,  true);   Deleting Deleting operation involving entities linked via a relationship can be problematic and is dependent on how the requirements. For example, what should happen when the user try to delete an owner that has multiple pets linked to it. Should the pets be deleted as well? The easiest way to handle this is to delete all the associated pets (maybe after a warning). You can tell Java to do a cascade removal of any pet associated with an Owner on deletion an owner by taking the following steps. • In the Owner class, look for the declaration of the petList attribute. • Above that should be a command starting with @ that looks like this: @OneToMany(mappedBy  =  “ownerid”)     Add another key to it as follows:   @OneToMany(mappedBy  =  “ownerid”,  cascade=CascadeType.REMOVE)   Jakkaphan Tangkuam…, 14/3/23 6:48 AM Comment [18]: Be  careful  if  you  choose  to  let   the  user  enter  new  attributes  into  the  components   that  are  bound  to  the  selected  item  of  the  JList.   Make  sure  that  you  have  NO  selected  item  when   you  add  a  new  object  ,  otherwise  you  will  be  editing   both  the  attributes  of  the  selected  object  and  the   new  object.  Use  clearSelection()  method  in  the  JList   to  clear  any  selection.  
  • 25.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     You may need to do additional import (for the class CascadeType). Once this line is added, the removal of any Owner will also trigger of automatic removal of his/her Pets. Since the remove operation require a selected item in the JList, you will need to first make sure you have a selection. Use the following code on the selectedOwner to remove the Owner (and his/her Pets). PetAppPUEntityManger.getTransaction().begin();   PetAppPUEntityManger.remove(selectedOwner);   PetAppPUEntityManger.getTransaction().commit();   However, since ownerList does not update automatically, we will have to manually update it using the following code. ownerList.remove(selectedOwner);   You may want to make the JList select another item (or you must manually reset the attribute fields as they will still reflected the deleted owner’s attributes. Also if the owner have any pets, all of the pets would have been removed too. However petList would be out of date so you will need to remove the pets or just reset that list. It might be easiest to do the following code: petList.clear();   petList.addAll(petQuery.getResultList());  
  • 26.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5     Possible Errors If you get errors you can not fix, it may be one of the following issues: Persistence Exception: Database is already connected Only one program can be connected to the database at the same time. Check that you don’t already have a copy of your program running or that Netbeans’ services tab don’t already have a connected connection to the same database. Persistence Exception: Check for existence of the lock file Check the database folder for a .lck file. If you copy the database when it is connected, you would have copied the .lck file as well. This file indicates to Netbeans that there is a connection. If you have made sure there isn’t any other connections, you may try to delete this .lck file. (You may need to close Netbeans to delete). Persistence Exception: Some related SQL errors Check that your table and fields don’t have spaces or any SQL or Java keywords (or any illegal symbols) or that your linked foreign key field values actually exist in the primary key table. Persistence Exception: Missing library (eg Java persistence, Derby etc) Copy the file derby.jar file (search for it on your computer or download one from Moodle) and put it in your project file (see Step 2.10). No table listed in binding window: Make sure you DB has a default schema (APP) If you don’t have a default schema, the binding window will not show any available database tables. If this is the case, you did not tell Netbeans that APP (or whichever schema you created your table in) is the default schema. To fix it you will need to connect back to the database in the Services tab and set the default schema. Once this is done, you will be able to select the table. Bound components are not updating after persisting Check that you only have one entity manager as well as one list and one query object for each entity class. If you have more than this, you have done one of the steps too many times (or have moved to a different computer and then try to resume incorrectly). To fix this, delete all the entity manager, lists and query object and the JTables for each entity class – then try and do all the binding again. You have List of Strings (or int or other types) instead of List of Entity objects If for some reason, your List (of Owners or Pets for example) contains Strings instead of entity objects, then you have used a binding expression in the JTable or JList. Do not use binding expression because they will make the underlying List a List of String. To fix this, you will need to redo the binding task. See previous answer for how to do this. You get a List cannot expand in size error when adding an item to a List You list can only expand automatically if you tick the modifiableWrapper in its properties window. (See step 2.8). While you are there, make sure observable is also checked. If you are lucky, you will be able to fix this without having to redo your project. Make sure you do a clean-and-build after you tick though.
  • 27.   Open-Licence 2014 J. Tangkuampien Data Aware Task – Step by step Guide for Java http://creativecommons.org/licenses/by-nc-sa/2.5/za/ version 0.5