# What is an Entity Attribute?

An attribute is a characteristic of an entity object or view object, implemented as a JavaBean property of the object class. An attribute can correspond to a database column, or be independent of a column.

## Two kinds of entity attributes

There are two kinds of entity attributes:

Attribute kind | Value derived from a database query? | Persisted in the database?
persistent | yes | yes (the value outlives the class that created it)
transient | no | no

## Persistent entity attributes correspond to database columns

When you first create an entity object using reverse generation, a persistent entity attribute is created for each table column. After, if you change the table, you need to manually change the attribute.

For forward generation, when you create database tables from entity objects, each persistent attribute becomes a column in the table.

## Entity attributes have settings

While creating or editing an entity object, you specify attribute settings. The settings can affect forward generation or the settings can be derived from an existing table (reverse generation). The following table summarizes what settings affect forward and reverse generation, and which settings apply to persistent and transient attributes.

Attribute Setting | Forward Generation | Reverse Generation | Persistent Attribute | Transient Attribute
Attribute Name | N/A | Default based on column name; you can change it to any Java identifier name. | Required | Required
Attribute Type | N/A | Default based on column data type; you can choose another type in the list. | Required | Required
Default Value | N/A | N/A | Optional | Optional
Primary Key | Becomes the table's primary key, or part of it if you specify multiple primary keys for a table (a composite key) | From the table; it must match the table. | Selectable | Selectable, but you should leave it deselected in most cases
Mandatory | Becomes a mandatory column in the table (a NOT NULL constraint is generated for that column in the table). | From the table; this value must match the table, or you might get problematic runtime behavior or an exception. | Selectable | Selectable
Persistent | Only persistent attributes are added to the table. | All attributes derived from the table are persistent; if you change it, this column does not get populated through the business components framework. | Selected | Deselected
Updateable | N/A | N/A | Selectable | Selectable
Refresh After | N/A | N/A except when the java.sql.type for this attribute is CHAR, then all Refresh After checkboxes are selected. | Selectable | N/A
Database Column Name | Becomes the table's column name | From the table; it must match the table. | Required; it must match the table. | N/A
Column Type | Becomes the table's column data type | From the table; it must match the table. | Required; it must match the table. | N/A
Queriable | N/A | N/A | Selectable | N/A
Unique | If selected, the column has a unique constraint. | From the table; it must match the table. | Selectable | N/A
Change Indicator | N/A | N/A | Selectable | N/A

In general, if you are performing reverse generation, you don't want to change the primary key, mandatory, database column name, column type, and unique settings that were received from the table. For forward generation, the primary key, mandatory, persistent, database column name, column type, and unique settings are used to generate tables.

## Entity attributes are based on the UML definition

In Business Components for Java, the term "attribute" is based on the UML definition, not the XML definition. In UML, an attribute is a named property of a class that describes a range of values that instances of that class might hold.

Related topics
Entity Attribute Settings
What Is an Entity Object?
About Generating Entity Objects, Associations, and Database Tables
What is a View Attribute?