Hibernate: How to know if an object is dirty in an update
Hi everyone:
I've looked around and I haven't found the solution for this, even asking in a hibernate forum, so maybe you know about this.
I want to know if an object is dirty before updating it to add a history record in every update. Hibernate does it automatically but I would like to know whether is dirty or not. I've seen in the book that we can do something like that with an interceptor but then I've seen this:
findDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) Do I have to set all these parameters everytime I call the method? Or does hibernate give us a tool or method to know the previous state of the object, the property names and the types?
Thank you very much in advance for your attention
Thanks, Mohammed, For your reply. Would appreciate if you can suggest if some inbuilt package is available to retrieve the payvalue for an element for any given period..
Thanks again for your time!!
Similar Messages
-
Hi all,
in scott Schema by ADF B.C 10.1.3, I created an entity object like emp
and created view object EmpView from emp and dept entities
and Application Module
and when draging EmpView and dropping it in jspx
while running I got an error :
JB0-25003 your EmpView View Object has no Type
How to determine a View Object Type (read only or updatable) in B.C ?
ThanksHi,
this should not require any manual confiuration. Can you select the ApplicationModule in the model, right click on it and run the ADf BC tester ? Check if he ViewObject runs if not added to JSF
Frank -
How to know corresponding info object for R/3 field and viceversa
Hi....
How to know corresponding object for a filed in r/3 data source and viceversa..While defining transformations.
We can't do mapping of all objects to fields with the definition......!!!
In 'rsosfieldmap'' what information we should give to know the proper tranformation...?
thank u.....Hi,
There are two ways to know the corresponding info objects in R/3 fields:
1) goto se11 t-code, enter RSOSFIELDMAP and enter display button. in the next screen click contents and give the field name or info object name as per your requirement, and excute.
2) first go through the field description in r/3 and identify the similar description in BI. For your easy understanding use excel sheet , in that you can copy the data source fields and target info objects ( master data or transaction data ). then it will be easy to identify the similar description.
Thank you. -
How to know when an object is deleted?
Hi,
In Java, instances of classes are eliminate by garbage collector and programmers have no chance to do it.
I need to do something, when the instance of a class ends its cycle-life .
How do I know when an object is going to be deleted, in order to make some thing bounded to this event?
thank you
Regards
AngeloThank you for your help ...
Here some code (I hope that I didn't forget something important):
1. A class inside the JaveaBeans to manage events:
* NavBean_EventsBroadcaster is a singleton class used in the JavaBean to manage (fire)
* the events; and also to manage (add/remove) the listeners.
* Events are raised when users push buttons with the purpose to change the display of
* records (of the table) on the screen.
public class NavBean_EventsBroadcaster implements Serializable {
private transient Vector listeners;
private static NavBean_EventsBroadcaster eventsBroadcaster_ForNavBeans = null;
Method to get the instance of the singleton class
static public NavBean_EventsBroadcaster getSingletonInstance() {
if (eventsBroadcaster_ForNavBeans == null) {
eventsBroadcaster_ForNavBeans = new NavBean_EventsBroadcaster();
return eventsBroadcaster_ForNavBeans;
} // getSingletonInstance
* fireTheEvent_X_navBean(): method that raise events
public void fireTheEvent_X_navBean(
Object source,
NavigatorBean_eventsList_ENUM nbEvtENUM,
ResultSet rst,
int keyReg) {
if (listeners != null && !listeners.isEmpty()) {
// object is going to be created (it contains the infos about the event)
NavBeanDB_EventDescriptor event_descr =
new NavBeanDB_EventDescriptor(
source, // dBbeanNavigator
nbEvtENUM,
rst,
keyReg);
// copy of the lisener to use it for add or remove
Vector targets;
synchronized (this) {
targets = (Vector) listeners.clone();
// proper event (select first, next, prev, last reg) is raised
Enumeration enumerat = targets.elements();
while (enumerat.hasMoreElements()) {
NavBeanDBListener_INTERFACE l =
(NavBeanDBListener_INTERFACE) enumerat.nextElement();
l.firedNavigationBeanEvents(event_descr);
System.out.println("Method fireTheEvent ----- key = " + priKeyOnTheScreen);
} // if
} // fireTheEvent()
* Adds a listener to the listener list.
* @param l The listener to add.
synchronized public void addNavBeanAddListener(NavBeanDBListener_INTERFACE l) {
if (listeners == null) {
listeners = new Vector();
listeners.addElement(l);
System.out.println("E' stato registrato un nuovo ascoltatatore per navigationBar");
} // addNavBeanAddListener()
* Removes a listener from the listener list.
* @param l The listener to remove.
synchronized public void removeNavBeanRemoveListener(NavBeanDBListener_INTERFACE l) {
if (listeners.contains(l)) {
listeners.remove(l);
} // removeNavBeanRemoveListener()
} // class NavBean_EventsBroadcaster2. The used interface
* This is the interface that specifies the contract between a NavBeans
* source and listener classes.
* @author Owner
public interface NavBeanDBListener_INTERFACE extends EventListener {
public void firedNavigationBeanEvents(NavBeanDB_EventDescriptor evt);
} // interface NavDB_BeansListener_INTERFACE3. the class adapter
public abstract class DbNavigatorBean_Adapter implements NavBeanDBListener_INTERFACE {
NavigatorBean_eventsList_ENUM navigatorBean_eventsList_ENUM;
public DbNavigatorBean_Adapter() { // costruttore
} // costruttore
* This class have to be implemented from listeners to get events.
* @param evt
// NavigatorBean_eventsList_ENUM {user_chang, sequential_first, sequential_prev, sequential_next, sequential_last}
public void firedNavigationBeanEvents(NavBeanDB_EventDescriptor evt) {
navigatorBean_eventsList_ENUM = evt.getEventType();
switch (navigatorBean_eventsList_ENUM) {
case user_chang:
toDoWhen_user_changeRegistration(evt);
break;
case sequential_first:
toDoWhen_setted_firstRegistration(evt);
break;
case sequential_prev:
toDoWhen_setted_prevRegistration(evt);
break;
case sequential_next:
toDoWhen_setted_nextRegistration(evt);
break;
case sequential_last:
toDoWhen_setted_lastRegistration(evt);
break;
} // witch case
} // firedNavigationBeanEvents()
abstract public void toDoWhen_user_changeRegistration(NavBeanDB_EventDescriptor evt); // { }
abstract public void toDoWhen_setted_firstRegistration(NavBeanDB_EventDescriptor evt); // { }
abstract public void toDoWhen_setted_nextRegistration(NavBeanDB_EventDescriptor evt); // { }
abstract public void toDoWhen_setted_prevRegistration(NavBeanDB_EventDescriptor evt); // { }
abstract public void toDoWhen_setted_lastRegistration(NavBeanDB_EventDescriptor evt); // { }
} // class class DbNavigatorBean_Adapter_base4. the class used to describe the event
Class used to dercribe the event that happened.
public class NavBeanDB_EventDescriptor extends EventObject {
private NavigatorBean_eventsList_ENUM navigationBean_events_ENUM;
private int primaryKeyOfRegOnTheScreen;
private ResultSet resultSet;
private int totOfRegsRegistredOnTheTable;
* Costructor: is used to describe the events
* @param source
* @param nbEvtENUM
* @param rst
* @param keyReg
public NavBeanDB_EventDescriptor( // costruttore
Object source,
NavigatorBean_eventsList_ENUM nbEvtENUM,
ResultSet rst,
int keyReg) {
super(source);
this.navigationBean_events_ENUM = nbEvtENUM;
this.resultSet = rst;
this.primaryKeyOfRegOnTheScreen = keyReg;
extractTotRegsInTheTable(rst);
// this.totOfRegsRegistredOnTheTable = rgsRegNmbr;
System.out.println("Viene creata una istanza di event descriptor");
}// costruttore
* which possibe action caused the event,
* was pushed the button (first, prev, next, last, user select...)
* @return
public NavigatorBean_eventsList_ENUM getEventType() {
return navigationBean_events_ENUM;
} // getEventType
* primmary key of registration on the screen
* @return
public int getPrimaryKeyOfTheRegOnTheScreen() {
return primaryKeyOfRegOnTheScreen;
} // getKeyRegOnTheScreen
* resultSet showed on the screen
public ResultSet getTheFullRegistrationOnTheScreen() {
return resultSet;
} // getTheFullRegistrationOnTheScreen
Number of registrations actually on the table.
public int getTotRegsRegistredOnTheTable() {
return this.totOfRegsRegistredOnTheTable;
} // getRegsRegistredNmbr
private classe that get data
private void extractTotRegsInTheTable(ResultSet rst) {
ResultSet localRst =rst;
try {
int curRow = localRst.getRow();
localRst.last();
this.totOfRegsRegistredOnTheTable = localRst.getRow();
localRst.absolute(curRow);
} catch (SQLException ex) {
Logger.getLogger(NavBeanDB_EventDescriptor.class.getName()).log(Level.SEVERE, null, ex);
} // class NavBeansEvent5. a possible use of the JavaBeans
public class TableClients extends JFrame
implements LinkTablesToDlgThatRandomizeSelections_INTERFACE {
private NavigationBean navigationBean;
public TableClients() { // constructor
navigationBean = new NavigationBean();
navigationBean.initializeDBbeanNavigator(...);
this.add(navigationBean);
navigationBean.addActionNavigatorListener(new DbNavigatorBean_Adapter() {
@Override
public void toDoWhen_user_changeRegistration(NavBeanDB_EventDescriptor nbdbed) {
// do something
@Override
public void toDoWhen_setted_firstRegistration(NavBeanDB_EventDescriptor nbdbed) {
// do something
@Override
public void toDoWhen_setted_nextRegistration(NavBeanDB_EventDescriptor nbdbed) {
// do something
@Override
public void toDoWhen_setted_prevRegistration(NavBeanDB_EventDescriptor nbdbed) {
// do something
@Override
public void toDoWhen_setted_lastRegistration(NavBeanDB_EventDescriptor nbdbed) {
// do something
} // constructor
} // class TableClientsthis code works well...
But if I implement the javaBeans on more than one Dialogs (windows) and the user uses
this dialogs sequentially, then the JavaBean responds to the events always as the caller is the
first dialog that run...
If I delete all listener (on the dialog) when the dialog is close then I have not problems
still thank you
Regards
Angelo -
How to know the workflow object name assigned to a Transaction code
Hi Friends,
There is one workflow object assigned to one transaction code VKM1. How can i know the workflow object name assigned to that particular transaction. Can anybody help me?
Regards
shankarHI
Please check t.code PPOMW
Thanks & Regards
Phaneendra -
How to know the DB objects using the particular tablespace
Hi All
I have tablespace which is used by different database objects.
I want to know which objects are using that tablespace.
How can I know this??
ThanksI have tablespace which is used by different database objects.
I want to know which objects are using that tablespace.
How can I know this??
select owner,segment_name,segment_type,tablespace_name from dba_segments where tablespace_name='&TBS'; -
How to know that remote object connection with server has not disconnected?
Hi,
In my application want to check weather connnection with
remote object has disconnected or not. I have not found any
property with remoteobject to verify this. Weather it is possible
with remote object or if not then how it could be done with
channel. I have checked connected property of channel but i could
not find out how it works.
Is there any solution for this, if any one know please
reply...
Thanks..Did you ever get resolved. I am having the sames issues
Regards,
Wally
http://www.level10solutions.com -
How to know which universe object is used in which BO documents?
Post Author: rOmain
CA Forum: Administration
Hi,
what is the easy way to know, at any time, if an object on a specific universe is used in BO documents (Desk I).
BO support advises me to use Uuditor, but I want to know if users have another solution.
Thanks for your feedback,
Regards,
rOmainPost Author: V361
CA Forum: Integrated Solutions
What are you using CR XI ? or ??? -
How to know if an object is a File or a Folder ?
Hello again,
I am looking for an easy method to determine whether a File or Folder object point to an actual file or to a folder. Both objects seem to have the same set of properties, except the File element has more. But the Data Browser in the ESTK refuses to show the contents of a File object when I have not actively retrieved the properties yet. Is this simply a matter of testing whether a file-related property exists in the object? Is there another, more elegant method, an undocumented feature, for instance a property IsFolder or something similar ?
Ciao
JangHi Jang,
This from Chapter 3 of the JavaScript Tools Guide:
There are several ways to distinguish between a File and a Folder object. For example:
if (f instanceof File) ...
if (typeof f.open == "undefined") ...// Folders do not open
File and Folder objects can be used anywhere that a path name is required, such as in properties and arguments for files and folders.
Rick -
How to know which systems are listed as requiring an update
When I go into the "All Software Updates" under the Software Library Admin workspace and in my search criteria i use "Required" greater than or equal to 1, how do I know which systems are requiring the update? I cannot see the name of
the computer in the search, just a number showing how many require it. I want to know if the test systems I deployed the SCCM 2012 client to are actually showing up and I don't know if they are by just seeing a number there and not computer names.
ThanksMore specifically, you can use the report Compliance 1 - Overall compliance
for a complete overview of the compliance for a software update group and you can use
Compliance 2 - Specific software update for an overview of the compliance for a specific software update.
My Blog: http://www.petervanderwoude.nl/
Follow me on twitter: pvanderwoude -
How do I choose which version of Acrobat will be updated?
I have a Mac Pro with one hard drive dedicated to nightly clone backups of my main drive. When the Adobe Acrobat Updater tells me that an update "to version 11.0.02 is available. Do you want to install it now?" How can know and/or choose which version it will update?
Because the cloned backups are stable in their environments, I only want to update the one on my main drive.
Thank you.Help > About Firefox
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.18) Gecko/20110614 Firefox/3.6.18 ( ) = '''3.6.18''' - but that '''( )''' doesn't belong there and Quickbooks Online might be misreading your UserAgent as a result of that ( ) being there.
Try resetting your UserAgent string.<br />
[http://en.wikipedia.org/wiki/User_Agent]
type '''about:config''' in the URL bar and hit Enter <br />
''If you see the warning, you can confirm that you want to access that page.'' <br />
Filter = '''general.useragent.''' <br />
Right-click the preferences that are '''bold''', one line at a time, and select '''''Reset'''''. <br />
Then restart Firefox -
How to know which master data objects need to activated in R3
SALES OVERVIEW CUBE -0SD_C03
How to know which master data objects need to activated from delivery version to active version in R/3 for a particular standard cube like 0SD_C03.
its very urgent please advise.
R/3 in RSA5
Sales Master Data
0ACCNT_ASGN_TEXT Account assignment group for this customer
0ACCNT_GRP_TEXT Customer account group
0BILBLK_DL_TEXT Locked
0BILBLK_ITM_TEXT Billing block for item
0BILL_BLOCK_TEXT Billing block in SD document
0BILL_CAT_TEXT Billing Category
0BILL_RELEV_TEXT Relevant for Billing
0BILL_RULE_TEXT Billing rule
0BILL_TYPE_TEXT Billing Type
0CONSUMER_ATTR Consumer
0CONSUMER_LKLS_HIER Consumer
0CONSUMER_TEXT Consumer
0CUST_CLASS_TEXT Customer Classification
0CUST_GROUP_TEXT Customer Group
0CUST_GRP1_TEXT Customer Group 1
0CUST_GRP2_TEXT Customer Group 2
0CUST_GRP3_TEXT Customer Group 3
0CUST_GRP4_TEXT Customer Group 4
0CUST_GRP5_TEXT Customer Group 5
0DEALTYPE_TEXT Sales Deal Type
0DEL_BLOCK_TEXT Delivery block (document header)
0DEL_TYPE_TEXT Delivery Type
0DISTR_CHAN_TEXT Distribution Channel
0DIVISION_TEXT Division
0DLV_BLOCK_TEXT Schedule line blocked for delivery
0DOC_CATEG_TEXT SD Document Category
0DOC_TYPE_TEXT Sales Document Type
0INCOTERMS_TEXT Incoterms (Part 1)
0INDUSTRY_TEXT Industry keys
0IND_CODE_3_TEXT Industry code 3
0IND_CODE_4_TEXT Industry code 4
0IND_CODE_5_TEXT Industry code 5
0IND_CODE_TEXT Industry code
0ITEM_CATEG_TEXT Sales document item category
0ITM_TYPE_TEXT FS item type
0KHERK_TEXT Condition Origin
0MATL_GRP_1_TEXT Material Group1
0MATL_GRP_2_TEXT Material Group 2
0MATL_GRP_3_TEXT Material Group 3
0MATL_GRP_4_TEXT Material Group 4
0MATL_GRP_5_TEXT Material Group 5
0MATL_TYPE_TEXT Material Type
0MAT_STGRP_TEXT Material statistics group
0NIELSEN_ID_TEXT Nielsen ID
0ORD_REASON_TEXT Order reason (reason for the business transaction)
0PICK_INDC_TEXT Indicator for picking control
0PRODCAT_TEXT Product Catalog Number
0PROD_HIER_TEXT Product Hierarchy
0PROMOTION_ATTR Promotion
0PROMOTION_TEXT Promotion
0PROMOTYPE_TEXT Promotion Type
0PROV_GROUP_TEXT Commission Group
0REASON_REJ_TEXT Reason for rejection of quotations and sales orders
0REBATE_GRP_TEXT Volume rebate group
0RECIPCNTRY_TEXT Destination country
0ROUTE_TEXT Route
0SALESDEAL_ATTR Sales deal
0SALESDEAL_TEXT Sales deal
0SALESORG_ATTR Sales organization
0SALESORG_TEXT Sales Organization
0SALES_DIST_TEXT Sales district
0SALES_GRP_TEXT Sales Group
0SALES_OFF_TEXT Sales Office
0SCHD_CATEG_TEXT Schedule line category
0SHIP_POINT_TEXT Shipping point/receiving point
In BW
Base Unit of Measure 0BASE_UOM
Bill-to party 0BILLTOPRTY
Calendar Day 0CALDAY
Calendar Year/Month 0CALMONTH
Calendar Year/Week 0CALWEEK
Change Run ID 0CHNGID
Company code 0COMP_CODE
Cost in statistics currency 0COST_VAL_S
Credit/debit posting (C/D) 0DEB_CRED
Distribution Channel 0DISTR_CHAN
Division 0DIVISION
Number of documents 0DOCUMENTS
Sales Document Category 0DOC_CATEG
Document category /Quotation/Order/Delivery/Invoice 0DOC_CLASS
Number of Document Items 0DOC_ITEMS
Fiscal year / period
Fiscal year variant 0FISCVARNT
Gross weight in kilograms 0GR_WT_KG
Number of Employees 0HDCNT_LAST
Material 0MATERIAL
Net value in statistics currency 0NET_VAL_S
Net weight in kilograms 0NT_WT_KG
Open orders quantity in base unit of measure 0OPORDQTYBM
Net value of open orders in statistics currency 0OPORDVALSC
Payer 0PAYER
Plant 0PLANT
Quantity in base units of measure 0QUANT_B
Record type 0RECORDTP
Request ID 0REQUID
Sales Employee 0SALESEMPLY
Sales Organization 0SALESORG
Sales group 0SALES_GRP
Sales Office 0SALES_OFF
Shipping point 0SHIP_POINT
Ship-To Party 0SHIP_TO
Sold-to party 0SOLD_TO
Statistics Currency 0STAT_CURR
In R3 RSA5 we have all the Master data data sources as mentioned above, and BW also. How to find the related Master data Infosource in R/3 Master data Data sources.
Thanks in advance,
Bhima.
Message was edited by: Bhima Chandra Sekhar GuntlaHi,
<i>How to know which master data objects need to activated from delivery version to active version in R/3 for a particular standard cube like 0SD_C03.</i>
I think, you are looking for master data sources(text,attributes,hier).Am i right?
If so, This cube has almost all SD master data characterstics. So you can activate all the all master data datasources of SD in r/3 (SD-IO).
Any way you requirement does not stop only by using this cube . You will activate all other cubes in SD also. So if you want to activate only needed master data datasources when you are activating a cube, the job becomes senseless. There is no problem(wrong) in activating all master data available under that application , even though you want to activate only one cube.
With rgds,
Anil Kumar Sharma .P -
How i know Authorization object in system?
Hi all,
i create new BAdi with Enhancement Spot: ZWORKORDER_GOODSMVT (copy WORKORDER_GOODSMVT in standard SAP)
now i have Badi definition: ZWORKORDER_GOODSMVT
with Interface: ZIF_EX_WORKORDER_GOODSMVT
all ok.
now how i can see authorization object in Badi definition: WORKORDER_GOODSMVT (standard)? i already creat Authorization object but now i don't know what field and choose in maintain the authorization (from Badi definition: WORKORDER_GOODSMVT )
ex: 1. in package BSFC have interface IF_EX_BSFC_POLICY and method GET_POLICY
2. Authorzation object: B_BSFC (have field name: BSFC_APPL and ACTVT in maintain the authorzation)
because i get this and solve in my job.
when i activate the BAdI function called WORKORDER_GOODSMVT and assign to the a.m. authorization object???
Processing Logic:
The backflush errors are created after the execution of backflushing transaction in Repetitive Manufacturing (REM) t-code MF42N or MFBF
If during the backflush execution the components are not available in the respective production storage location then system by default will create backflush errors
Backflush errors will need to be cleared everyday and must be cleared before end month stock take
Backflush errors can be processed using the following t-code:
o MF45 Individual
o MF46 Collective
o MF47 Post processing List
o COGI Post processing Individual Components
Authorization will be applied only for COGI, while others will not be used in PSECI
Create new authorization object called Z_PP_COGI to be assigned later to the user id
Activate the BAdI function called WORKORDER_GOODSMVT and assign to the a.m. authorization object
For unauthorized users, an errors message will appear if they try to delete the backflush errors in COGI transaction as follows:
o You are not authorized to change/ delete the backflush errors! Please contact your superior!
Thanks so much all, ......Hi Nguyen,
Check the following links:
http://help.sap.com/saphelp_erp2004/helpdata/en/b8/bdb83b5b831f3be10000000a114084/content.htm
http://help.sap.com/saphelp_nw04s/helpdata/en/52/6714a9439b11d1896f0000e8322d00/content.htm
Regards,
Rajesh K Soman
<b>Please reward points if found helpful.</b> -
How to know which object is in which transport requeset
hi frnds
how to know which object is in which transport requesthi Preethi
try with transaction se01 then clic on the tools icon under the menu you will get a list of function.
then select search for object in transport request (maybe the text is a bit different) then enter information like for example R3TR OSOA and the name of a datasource. if you don't know the meaning of R3TR use the match code and use it also for objects you want to find infosource infoobject etc... don't forget to mark the flag select if your transport request is released or not and then execute you will get the list of all transport requests containing your search object.
hope this could help you
best regards
Boujema -
How to know BW report there in how many roles
dear master's,
In the BW system version 3.5 ,how to know roles by BW report, i have checked in SUIM for cheking the same,i could able to search by T code and object not by report in the role menu
Edited by: rameshbabu muddana on Feb 12, 2009 1:56 PM
Edited by: rameshbabu muddana on Feb 12, 2009 1:57 PMHi,
You can find the roles which all having particular BW report by the table AGR_1251.
For this you need to know the technical name of the report, you can find the technical name of the report either in Bex analyzer or in RSRT.
For granting access to any BW report in a role the technical name of the role should be included in the object S_RS_COMP,
1) go to transaction SE16.
2) open the table AGR_1251
3) enter in the field "object with "S_RS_COMP"
4) and the field "FIELD" with "RSZCOMPID"
5) Give the BW report (technical name) which you want to search in the field "LOW"
6) click on execute.
Caution: in case you are giving complete techincal name of the report, it will show only if the roles are updated under the object S_RS_COMP with complete technical names, however if in the roles you are giving ranges something (as example : BW_FIN_*) you need to give the range in SE16 as well.
Hope this helps you!
Regards,
Ananth
Maybe you are looking for
-
Help!Cache status of object for Central Adapter Engine is incorrect
this problem cconfused me several days! version:PI 7.1 after i activate the communication channel, the cache not update for central adapter engine problem: in cache status overview, the update for central adapter engine not yet started, but notificat
-
I am trying to register my macbook pro and every time i got a message telling me that this product is registered with different apple id, how it comes?
-
Function Module/Method for opening path on frontend
Hi, I am looking for an function module or a method of a class which can be used for opening (in windows) an explorer-window with a given path. I don't wanna select any files of directories there, only opening the windows and processing the normal lo
-
IBooks wont open any books or complete the download
I upgraded to the latest version of iBooks about 2 weeks ago (iBooks 2) since then i have been unable to open any of my books, both downloaded from the bookstore and PDF book stored on the device. I upgraded to the latest update of iBooks and still n
-
i have a datatype i created on the server. On the server is a method that returns that datatype in a array. How can i sepecify in the idl that the return type is a special datatype and that it is also an array.