Exception when trying to saving entity

I want to create several tables in my module to add its in database. At first I created table UserRiskFactors without fields rang and isApproved, and then added its.

Table UserRiskFactors with rows rang and isApproved was created is MySQL. But I get some strange error: Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ‘rang’ in ‘field list’

My module’s code is below:

> <?xml version="1.0"?>
<class name="org.openmrs.module.hyphothesisnet.UserRiskFactors" table="risk">

    <cache usage="read-write"/>

    <id name="userRiskFactorId" type="java.lang.Integer" column="user_risk_factor_id" unsaved-value="0">
        <generator class="native">
            <param name="sequence">user_risk_factor_id_seq</param>
        </generator>
    </id>

    <property name="uuid" type="java.lang.String"
              column="uuid" length="38" unique="true"/>

    <property name="rang" type="java.lang.Integer" column="rang"/>

    <property name="isApproved" type="java.lang.Boolean" column="isApproved"/>

    <many-to-one name="risk" class="org.openmrs.module.hyphothesisnet.Risk"
                 column="risk_id" />

    <many-to-one name="factor" class="org.openmrs.module.hyphothesisnet.Factor"
                 column="factor_id" />

    <many-to-one name="kbResult" class="org.openmrs.module.hyphothesisnet.KBResult"
                 column="kbResult_id" />

</class>
package org.openmrs.module.hyphothesisnet;

import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import org.hibernate.search.annotations.DocumentId;
import org.openmrs.BaseOpenmrsObject;

import javax.persistence.Column;
import java.io.Serializable;

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")
public class UserRiskFactors extends BaseOpenmrsObject implements Serializable {
	
	private static final long serialVersionUID = 8873867396395387714L;
	
	@DocumentId
	protected Integer userRiskFactorId;
	
	private Risk risk;
	
	private Factor factor;
	
	private KBResult kbResult;
	
	private Integer rang;
	
	private Boolean isApproved;
	
	public static long getSerialVersionUID() {
		return serialVersionUID;
	}
	
	public Integer getUserRiskFactorId() {
		return userRiskFactorId;
	}
	
	public void setUserRiskFactorId(Integer userRiskFactorId) {
		this.userRiskFactorId = userRiskFactorId;
	}
	
	@Override
	public void setId(Integer id) {
		setUserRiskFactorId(id);
		
	}
	
	@Override
	public Integer getId() {
		return getUserRiskFactorId();
		
	}
	
	public Risk getRisk() {
		return risk;
	}
	
	public void setRisk(Risk risk) {
		this.risk = risk;
	}
	
	public Factor getFactor() {
		return factor;
	}
	
	public void setFactor(Factor factor) {
		this.factor = factor;
	}
	
	public KBResult getKbResult() {
		return kbResult;
	}
	
	public void setKbResult(KBResult kbResult) {
		this.kbResult = kbResult;
	}
	
	public Integer getRang() {
		return rang;
	}
	
	public void setRang(Integer rang) {
		this.rang = rang;
	}
	
	public Boolean getIsApproved() {
		return isApproved;
	}
	
	public void setIsApproved(Boolean approved) {
		isApproved = approved;
	}
	
}
1 Like

Did you include the column in the liquibase changeset that creates the table?

Yes! At first I used

<changeSet author="maryjis" id="20182510-15-32-modifyDataType-userRiskFactors">

    <addColumn
            tableName="userRiskFactors">
        <column name="rang"  type="int"/>
    </addColumn>
</changeSet>

Then, I unistalled OpenMRS, dropped all tables and istalled again. And I use this code in liquibase, but get the same error:

<changeSet id="20181018-1328-create-userRiskFactors-table" author="maryjis">
    <preConditions onFail="MARK_RAN">
        <not><tableExists tableName="userRiskFactors"/></not>
    </preConditions>
    <comment>Creating userRiskFactors  table</comment>
    <createTable tableName="userRiskFactors">
        <column autoIncrement="true" name="user_risk_factor_id" type="int">
            <constraints nullable="false" primaryKey="true"/>
        </column>

        <column defaultValueNumeric="0" name="risk_id" type="int">
            <constraints nullable="false"/>
        </column>

        <column defaultValueNumeric="0" name="factor_id" type="int">
            <constraints nullable="false"/>
        </column>

        <column defaultValueNumeric="0" name="rang" type="int">
        </column>

        <column defaultValueBoolean="false" name="isApproved" type="BOOLEAN">
        </column>

        <column defaultValueNumeric="0" name="kbResult_id" type="int">
            <constraints nullable="false"/>
        </column>

        <column defaultValueNumeric="0" name="creator" type="int">
            <constraints nullable="false"/>
        </column>
        <column name="date_created" defaultValueDate="CURRENT_TIMESTAMP" type="TIMESTAMP">
            <constraints nullable="false"/>
        </column>
        <column defaultValueBoolean="false" name="voided" type="BOOLEAN">
            <constraints nullable="false"/>
        </column>
        <column name="voided_by" type="int"/>
        <column name="date_voided" type="DATETIME"/>
        <column name="void_reason" type="varchar(255)"/>
        <column name="changed_by" type="int"/>
        <column name="date_changed" type="DATETIME"/>
        <column name="uuid" type="char(38)" />
    </createTable>
    <addForeignKeyConstraint baseColumnNames="risk_id" baseTableName="userRiskFactors" constraintName="userRiskFactors_risk" 							deferrable="false" initiallyDeferred="false" onUpdate="CASCADE" referencedColumnNames="risk_id" 							referencedTableName="risk"/>
    <addForeignKeyConstraint baseColumnNames="factor_id" baseTableName="userRecsFactors" constraintName="userRecsFactors_factor" 							deferrable="false" initiallyDeferred="false" onUpdate="CASCADE" referencedColumnNames="factor_id" 							referencedTableName="factor"/>
    <addForeignKeyConstraint baseColumnNames="kbResult_id" baseTableName="userRecsFactors" constraintName="userRecsFactors_kbResult" 							deferrable="false" initiallyDeferred="false" onUpdate="CASCADE" referencedColumnNames="kbResult_id" 							referencedTableName="kbResult"/>
</changeSet>

Can you paste the entire stack trace or error log at pastebin.com and share the url?

Could you also point us to the repository where this module’s source is?