views:

58

answers:

1

I'm looking for a way to set the "default" mapping that Hibernate applies to a variable name in a Java object to query it against the database. At the moment we are using the inline javax.persistence markup to manually set column names, but since we have a rigid naming policy for our database it would be nice to be able to just skip on the manual naming and let Hibernate do the mapping. However, at the moment this doesnt work nice at all with anything save for local, non-primary key fields.

At the moment, Hibernate seems to be set to map non-foreign keys to just their name (see "foo" in the below example class), and foreign-keys to "variableName_ReferencedTable_Id" (see "bar" in the below example class). We would like non-foreign keys to stay as they are, except for the variable marked @id, which we would like to be mapped to "TableName_Id", and we would like foreign keys to be mapped to "variableName_Id". Is this even possible, or do we just have to put up with manual mapping?

package testPackage.test

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Table1 {

    private int id;
    private int localVariable;
    private int foreignKeyVariable;

    // Constructor here somewhere

    // Without a @Column( name="Table1_Id" ), this comes out as "id".
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO)
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    // This works fine, being a local field.

    public int getLocalVariable() {
        return localVariable;
    }

    public void setLocalVariable(int LocalVariable) {
        this.localVariable = localVariable;
    }

    // Withou a @JoinColumn( name="foreignKeyVariable_Id" ) , this comes out as "foreignKeyVariable_Table2_Id".

    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
    @JoinColumn() // Not sure if this would even be necessary at all. Happy to leave it out if possible.
    public int getForeignKeyVariable() {
        return foreignKeyVariable;
    }

    public void setForeignKeyVariable(int foreignKeyVariable) {
        this.foreignKeyVariable = foreignKeyVariable;
    }

}
+1  A: 

(copied from comment)

Hibernate does have the concept of NamingStrategy, but it's not sensitive to whether than object is a PK or a normal column, so that's not going to be of any use.

skaffman