在这种情况下有人帮助我吗?我正在使用hibernate从db中选择数据,但是当我从sql调试日志中检查时。我总是看到在使用“select”sql从DB获取数据后打印的更新sql。
2013-08-13 13:39:08,054 DEBUG [http-0.0.0.0-8080-1-TASK]-[org.hibernate.SQL]
SELECT this_.id AS id504_2_,
this_.bridgedlinedialoguri AS bridgedL2_504_2_,
this_.bridgedlineuri AS bridgedL3_504_2_,
this_.currentsipsubscriberprofile AS currentS4_504_2_,
this_.currentsipsubscriberprofiletype AS currentS5_504_2_,
this_.messageeventuri AS messageE6_504_2_,
this_.nemobjectid AS neMobjec7_504_2_,
this_.objectid AS objectId504_2_,
this_.objecttype AS objectType504_2_,
this_.sipbridgedlineurienable AS sipBrid10_504_2_,
this_.sipdirectconnecturi AS sipDire11_504_2_,
this_.sipdirectconnecturienable AS sipDire12_504_2_,
this_.sipidentityaddress AS sipIden13_504_2_,
this_.sipidentitycontacturi AS sipIden14_504_2_,
this_.sipidentitypassword AS sipIden15_504_2_,
this_.sipidentityrealm AS sipIden16_504_2_,
this_.sipiotparametersenablestatus AS sipIotP17_504_2_,
this_.sipiotparametersprivacy AS sipIotP18_504_2_,
this_.sipiotparametersrequire100rel AS sipIotP19_504_2_,
this_.sipiotparameterssupport100rel AS sipIotP20_504_2_,
this_.sipmessageeventurienable AS sipMess21_504_2_,
this_.sippreferredid AS sipPref22_504_2_,
this_.sippreferredidmode AS sipPref23_504_2_,
this_.sipsubscribertemplateenable AS sipSubs24_504_2_,
this_.sipusername AS sipUser25_504_2_,
this_.versipsubscriberprofile_id AS verSipS26_504_2_,
versioneds2_.id AS id507_0_,
versioneds2_.configurationprofileid AS configur4_507_0_,
versioneds2_.description AS descript2_507_0_,
versioneds2_.version AS version507_0_,
configurat3_.id AS id505_1_,
configurat3_.description AS descript2_505_1_,
configurat3_.NAME AS name505_1_,
configurat3_.type AS type505_1_,
profilemob4_.versionedsipsubscriberconfigprofile_id AS Versione1_507_4_,
profilemob4_.element AS element4_
FROM test this_
LEFT OUTER JOIN versionedsipsubscriberconfigprofile versioneds2_
ON this_.versipsubscriberprofile_id = versioneds2_.id
LEFT OUTER JOIN configurationprofile configurat3_
ON versioneds2_.configurationprofileid = configurat3_.id
LEFT OUTER JOIN versionedsipsubscriberconfigprofile_profilemobjectids
profilemob4_
ON versioneds2_.id =
profilemob4_.versionedsipsubscriberconfigprofile_id
WHERE this_.objectid = ?
2013-08-13 13:39:08,103 DEBUG [http-0.0.0.0-8080-1-TASK]-[org.hibernate.SQL]
UPDATE test
SET bridgedlinedialoguri = ?,
bridgedlineuri = ?,
currentsipsubscriberprofile = ?,
currentsipsubscriberprofiletype = ?,
messageeventuri = ?,
nemobjectid = ?,
objectid = ?,
objecttype = ?,
sipbridgedlineurienable = ?,
sipdirectconnecturi = ?,
sipdirectconnecturienable = ?,
sipidentityaddress = ?,
sipidentitycontacturi = ?,
sipidentitypassword = ?,
sipidentityrealm = ?,
sipiotparametersenablestatus = ?,
sipiotparametersprivacy = ?,
sipiotparametersrequire100rel = ?,
sipiotparameterssupport100rel = ?,
sipmessageeventurienable = ?,
sippreferredid = ?,
sippreferredidmode = ?,
sipsubscribertemplateenable = ?,
sipusername = ?,
versipsubscriberprofile_id = ?
WHERE id = ?
谢谢
编辑:获取数据的代码:
@Override public MObjectId findResult(final MObjectId id, boolean isLocked)
{
Criteria c = getSession().createCriteria(Test.class);
c.add(Expression.eq("objectId", id));
if(isLocked)
{
c.setLockMode("this", LockMode.UPGRADE);
}
Test extension = (Test) c.uniqueResult();
return (extension != null)
? new MObjectId("/ontPotsSipExtNr=" + extension.getId())
: null;
}
实体类如下:
@Entity
public class OntPotsSipExtension implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
public OntPotsSipExtension() {
}
@Column(unique = true, nullable = false)
@Type(type = "com.container.persistence.MObjectIdUserType")
private MObjectId objectId;
@Column(unique = false, nullable = true)
@Type(type = "com.container.persistence.MObjectTypeUserType")
private MObjectType objectType;
private ToggleSwitch sipSubscriberTemplateEnable = ToggleSwitch.DISABLE;
@ManyToOne
private VersionedSipSubscriberConfigProfile verSipSubscriberProfile = null;
@Column(unique = false, nullable = true)
@Type(type = "com.container.persistence.MObjectIdUserType")
private MObjectId neMobjectId;
private String sipIdentityAddress;
private String sipIdentityRealm;
private Password sipIdentityPassword;
private String sipIdentityContactURI;
private String sipUsername;
private ToggleSwitch sipDirectConnectUriEnable = ToggleSwitch.DISABLE;
@EnabledExpression("sipDirectConnectUriEnable eq 'ENABLE'")
private String sipDirectConnectUri;
private ToggleSwitch sipMessageEventUriEnable = ToggleSwitch.DISABLE;
@EnabledExpression("sipMessageEventUriEnable eq 'ENABLE'")
private String messageEventUri;
private ToggleSwitch sipBridgedLineUriEnable = ToggleSwitch.DISABLE;
@EnabledExpression("sipBridgedLineUriEnable eq 'ENABLE'")
private String bridgedLineUri;
@EnabledExpression("sipBridgedLineUriEnable eq 'ENABLE'")
private String bridgedLineDialogUri;
@Column(unique = false, nullable = true)
@Type(type = "com.container.persistence.MObjectIdUserType")
private MObjectId currentSipSubscriberProfile;
@Column(unique = false, nullable = true)
@Type(type = "com.container.persistence.MObjectTypeUserType")
private MObjectType currentSipSubscriberProfileType;
/* SIP IOT Parameters*/
private PrivacySettings sipIotParametersPrivacy = PrivacySettings.NULL;
private ToggleSwitch sipIotParametersEnableStatus = ToggleSwitch.ENABLE;
private ToggleSwitch sipPreferredIDMode = ToggleSwitch.DISABLE;
private String sipPreferredID;
private ToggleSwitch sipIotParametersSupport100Rel = ToggleSwitch.DISABLE ;
private ToggleSwitch sipIotParametersRequire100Rel = ToggleSwitch.DISABLE;
public String getBridgedLineDialogUri() {
return bridgedLineDialogUri;
}
public void setBridgedLineDialogUri(String bridgedLineDialogUri) {
this.bridgedLineDialogUri = bridgedLineDialogUri;
}
public String getBridgedLineUri() {
return bridgedLineUri;
}
public void setBridgedLineUri(String bridgedLineUri) {
this.bridgedLineUri = bridgedLineUri;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getMessageEventUri() {
return messageEventUri;
}
public void setMessageEventUri(String messageEventUri) {
this.messageEventUri = messageEventUri;
}
public MObjectId getObjectId() {
return objectId;
}
public void setObjectId(MObjectId objectId) {
this.objectId = objectId;
}
public String getSipDirectConnectUri() {
return sipDirectConnectUri;
}
public void setSipDirectConnectUri(String sipDirectConnectUri) {
this.sipDirectConnectUri = sipDirectConnectUri;
}
public String getSipIdentityAddress() {
return sipIdentityAddress;
}
public void setSipIdentityAddress(String sipIdentityAddress) {
this.sipIdentityAddress = sipIdentityAddress;
}
public String getSipIdentityContactURI() {
return sipIdentityContactURI;
}
public void setSipIdentityContactURI(String sipIdentityContactURI) {
this.sipIdentityContactURI = sipIdentityContactURI;
}
public Password getSipIdentityPassword() {
return sipIdentityPassword;
}
public void setSipIdentityPassword(Password sipIdentityPassword) {
this.sipIdentityPassword = sipIdentityPassword;
}
public String getSipIdentityRealm() {
return sipIdentityRealm;
}
public void setSipIdentityRealm(String sipIdentityRealm) {
this.sipIdentityRealm = sipIdentityRealm;
}
public String getSipUsername() {
return sipUsername;
}
public void setSipUsername(String sipUsername) {
this.sipUsername = sipUsername;
}
public ToggleSwitch getSipSubscriberTemplateEnable() {
return sipSubscriberTemplateEnable;
}
public void setSipSubscriberTemplateEnable(
ToggleSwitch sipSubscriberTemplateEnable) {
this.sipSubscriberTemplateEnable = sipSubscriberTemplateEnable;
}
public VersionedSipSubscriberConfigProfile getVerSipSubscriberProfile() {
return verSipSubscriberProfile;
}
public void setVerSipSubscriberProfile(
VersionedSipSubscriberConfigProfile verSipSubscriberProfile) {
this.verSipSubscriberProfile = verSipSubscriberProfile;
//TODO
/*
* This needs to be done so that the Usage State changes to DEPLOY at the first
* instance this profile is used
*/
//this.subscriberProfile.setUsageState( UsageState.USAGE_DEPLOY );
}
public ToggleSwitch getSipBridgedLineUriEnable() {
return sipBridgedLineUriEnable;
}
public void setSipBridgedLineUriEnable(ToggleSwitch sipBridgedLineUriEnable) {
this.sipBridgedLineUriEnable = sipBridgedLineUriEnable;
}
public ToggleSwitch getSipDirectConnectUriEnable() {
return sipDirectConnectUriEnable;
}
public void setSipDirectConnectUriEnable(ToggleSwitch sipDirectConnectUriEnable) {
this.sipDirectConnectUriEnable = sipDirectConnectUriEnable;
}
public ToggleSwitch getSipMessageEventUriEnable() {
return sipMessageEventUriEnable;
}
public void setSipMessageEventUriEnable(ToggleSwitch sipMessageEventUriEnable) {
this.sipMessageEventUriEnable = sipMessageEventUriEnable;
}
public MObjectId getNeMobjectId() {
return neMobjectId;
}
public void setNeMobjectId(MObjectId neMobjectId) {
this.neMobjectId = neMobjectId;
}
public MObjectId getCurrentSipSubscriberProfile() {
return currentSipSubscriberProfile;
}
public void setCurrentSipSubscriberProfile(MObjectId currentSipSubscriberProfile) {
this.currentSipSubscriberProfile = currentSipSubscriberProfile;
}
public MObjectType getCurrentSipSubscriberProfileType() {
return currentSipSubscriberProfileType;
}
public void setCurrentSipSubscriberProfileType(
MObjectType currentSipSubscriberProfileType) {
this.currentSipSubscriberProfileType = currentSipSubscriberProfileType;
}
public MObjectType getObjectType() {
return objectType;
}
public void setObjectType(MObjectType objectType) {
this.objectType = objectType;
}
public PrivacySettings getSipIotParametersPrivacy() {
return sipIotParametersPrivacy;
}
public void setSipIotParametersPrivacy(PrivacySettings privacy) {
this.sipIotParametersPrivacy = privacy;
}
public ToggleSwitch getSipIotParametersEnableStatus() {
return sipIotParametersEnableStatus;
}
public void setSipIotParametersEnableStatus(ToggleSwitch sipIotParametersEnableStatus) {
this.sipIotParametersEnableStatus = sipIotParametersEnableStatus;
}
public ToggleSwitch getSipIotParametersSupport100Rel() {
return sipIotParametersSupport100Rel;
}
public void setSipIotParametersSupport100Rel(ToggleSwitch support100Rel) {
this.sipIotParametersSupport100Rel = support100Rel;
}
public ToggleSwitch getSipIotParametersRequire100Rel() {
return sipIotParametersRequire100Rel;
}
public void setSipIotParametersRequire100Rel(ToggleSwitch require100Rel) {
this.sipIotParametersRequire100Rel = require100Rel;
}
public ToggleSwitch getSipPreferredIDMode() {
return sipPreferredIDMode;
}
public void setSipPreferredIDMode(ToggleSwitch sipPreferredIDMode) {
this.sipPreferredIDMode = sipPreferredIDMode;
}
public String getSipPreferredID() {
return sipPreferredID;
}
public void setSipPreferredID(String sipPreferredID) {
this.sipPreferredID = sipPreferredID;
}
public Properties getProperties(boolean enableSipIotParams)
{
String QUOTES= "\"";
Properties props = new Properties();
props.setProperty("AddressOfRecord",QUOTES + ( getSipIdentityAddress() != null ? getSipIdentityAddress() : "" )+ QUOTES);
props.setProperty("Realm", QUOTES + ( getSipIdentityRealm() != null ? getSipIdentityRealm() : "" )+ QUOTES);
props.setProperty("Password", QUOTES + ( getSipIdentityPassword() != null ? getSipIdentityPassword().getPassword() : "" )+ QUOTES);
props.setProperty("ContactURIUser",QUOTES + ( getSipIdentityContactURI() != null ? getSipIdentityContactURI() : "" )+ QUOTES);
props.setProperty("username",QUOTES + ( getSipUsername() != null ? getSipUsername() : "" )+ QUOTES);
if ( getSipDirectConnectUriEnable() != null && getSipDirectConnectUriEnable().equals( ToggleSwitch.ENABLE ))
{
props.setProperty("DirectConnectURI",QUOTES + ( getSipDirectConnectUri() != null ? getSipDirectConnectUri() : "" )+ QUOTES);
}
if ( getSipMessageEventUriEnable() != null && getSipMessageEventUriEnable().equals(ToggleSwitch.ENABLE) )
{
props.setProperty("message_event_uri",QUOTES + ( getMessageEventUri() != null ? getMessageEventUri() : "" )+ QUOTES);
}
if ( getSipBridgedLineUriEnable() != null && getSipBridgedLineUriEnable().equals( ToggleSwitch.ENABLE ) )
{
props.setProperty("bridged_line_uri",QUOTES + ( getBridgedLineUri() != null ? getBridgedLineUri() : "" )+ QUOTES);
props.setProperty("bridged_line_dialog_uri",QUOTES + ( getBridgedLineDialogUri() != null ? getBridgedLineDialogUri() : "" )+ QUOTES);
}
if(enableSipIotParams && getSipIotParametersEnableStatus() != null && getSipIotParametersEnableStatus() == ToggleSwitch.ENABLE ){
String privacy="";
if ( getSipIotParametersPrivacy() != null)
{
if(getSipIotParametersPrivacy() == PrivacySettings.ID)
privacy="id";
else if(getSipIotParametersPrivacy() == PrivacySettings.NONE)
privacy="none";
else if(getSipIotParametersPrivacy() == PrivacySettings.NULL)
privacy="";
}
props.setProperty("Privacy", QUOTES + privacy + QUOTES);
props.setProperty("Support100Rel", QUOTES + ( getSipIotParametersSupport100Rel() != null ?
getSipIotParametersSupport100Rel().getValue() : ToggleSwitch.DISABLE.getValue() )+ QUOTES);
props.setProperty("Require100Rel", QUOTES + ( getSipIotParametersRequire100Rel() != null ?
getSipIotParametersRequire100Rel().getValue() : ToggleSwitch.DISABLE.getValue() )+ QUOTES);
props.setProperty("Mode", QUOTES + ( getSipPreferredIDMode() != null ?
getSipPreferredIDMode().getValue() : ToggleSwitch.DISABLE.getValue() ) + QUOTES);
props.setProperty("ID", QUOTES + ( getSipPreferredID() != null ? getSipPreferredID() : "" )+ QUOTES);
}
//TODO Check this
// if ( sipSubscriberTemplateEnable != null && sipSubscriberTemplateEnable.equals(ToggleSwitch.ENABLE) )
// {
// Properties templProps = subscriberProfile.getProperties();
// Enumeration<?> propNames = templProps.propertyNames();
//
// while ( propNames.hasMoreElements() )
// {
// Object key = propNames.nextElement() ;
// props.setProperty(key.toString(), templProps.getProperty( key.toString() ));
// }
// }
return props;
}
}
答案 0 :(得分:11)
最有可能的情况是,实体的某个属性不会返回加载后由hibernate设置的完全相同的值。你是否在getter或setter中有一些if语句,如null处理或类似的东西?
答案 1 :(得分:0)
升级锁定。在此锁定模式下加载的对象使用SQL select ...进行更新。
与sql
中的select for update相同如果您不想选择更新,请删除以下代码并重新运行
if(isLocked)
{
c.setLockMode("this", LockMode.UPGRADE);
}
答案 2 :(得分:0)
我遇到了同样的问题,其中激活select之后的select语句最终会出现在update语句中。这是在我从websphere 7.0迁移到Jboss 7.0之后发生的。
Object具有String属性,其中select返回“Y”或“N”,因此hibernate触发了更新的思维,对象的值发生了变化。
我所做的就是在我的hbm.xml中我将该属性标记为update =“false”。
<property name="someStringProperty" type="string" update="false"/>