A common nuisance in ODI 12.2.1 happens when attributes of an existing table are changed. After reverse enineering the model in ODI, changes in constraints do not refresh in table operators of a mapping.
For example, you have a target table which has a primary key constraint on 3 columns, and this table is loaded from an ODI mapping. Now, you change the PK so that it only consists of 2 columns. After you reverse engineer the ODI model, the table representation in ODI mapping editor still shows you three little key symbols, and the table is not marked as changed. If you loom at the table operator properties, the "Key" button is grey and cannot be changed.
If you do drag the table from the model into the mapping again, the resulting new table operator shows the new, correct PK configuration. So, the reverse engineering did work, but the table operator in the mapping did not refresh.
There is one way to quickly refresh the table operator while keeping all it's information (column contents, target configutarions, IKM used). In the logical mapping view, in the general (target) table operator configuration, you can re-assign the datastore. This field is greyed out, but once you mouse-over it, a settings symbol occurs, and if you click it, you can select the (same) target table again. Once this is done, th table refreshes and the PK configuration is correct.