第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在Hibernate中繞過GeneratedValue(合并數(shù)據(jù)不在db中?)

在Hibernate中繞過GeneratedValue(合并數(shù)據(jù)不在db中?)

肥皂起泡泡 2019-09-24 16:19:08
我的問題與[1]或[2]中描述的相同。我需要手動(dòng)設(shè)置默認(rèn)情況下自動(dòng)生成的值(為什么?導(dǎo)入舊數(shù)據(jù))。如[1]中所述,使用Hibernate entity = em.merge(entity)可以解決問題。對(duì)我來說不幸的是事實(shí)并非如此。我既沒有收到錯(cuò)誤,也沒有其他任何警告。該實(shí)體只是不會(huì)出現(xiàn)在數(shù)據(jù)庫中。我正在使用Spring和Hibernate EntityManager 3.5.3-Final。有任何想法嗎?
查看完整描述

3 回答

?
回首憶惘然

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊

它可以通過以下代碼在我的項(xiàng)目中運(yùn)行:


@XmlAttribute

@Id

@Basic(optional = false)

@GeneratedValue(strategy=GenerationType.IDENTITY, generator="IdOrGenerated")

@GenericGenerator(name="IdOrGenerated",

                  strategy="....UseIdOrGenerate"

)

@Column(name = "ID", nullable = false)

private Integer id;


import org.hibernate.id.IdentityGenerator;

...

public class UseIdOrGenerate extends IdentityGenerator {

private static final Logger log = Logger.getLogger(UseIdOrGenerate.class.getName());


@Override

public Serializable generate(SessionImplementor session, Object obj) throws HibernateException {

    if (obj == null) throw new HibernateException(new NullPointerException()) ;


    if ((((EntityWithId) obj).getId()) == null) {

        Serializable id = super.generate(session, obj) ;

        return id;

    } else {

        return ((EntityWithId) obj).getId();


    }

}

在這里,您基本上定義了自己的ID生成器(基于Identity策略),如果未設(shè)置ID,則將生成委托給默認(rèn)生成器。


主要缺點(diǎn)是它使您無法將Hibernate用作JPA提供程序...但是它與我的MySQL項(xiàng)目完美配合


查看完整回答
反對(duì) 回復(fù) 2019-09-24
?
交互式愛情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

另一個(gè)實(shí)現(xiàn),方法更簡(jiǎn)單。


這其中的工作原理與兩個(gè)基于XML注釋或基于配置:它依靠休眠元數(shù)據(jù)中獲取價(jià)值為對(duì)象的ID。根據(jù)您的配置替換SequenceGenerator為IdentityGenerator(或任何其他生成器)。(創(chuàng)建裝飾器而不是子類,將裝飾的ID生成器作為參數(shù)傳遞給此生成器,作為練習(xí)留給讀者)。


public class UseExistingOrGenerateIdGenerator extends SequenceGenerator {

    @Override

    public Serializable generate(SessionImplementor session, Object object)

                        throws HibernateException {

        Serializable id = session.getEntityPersister(null, object)

                      .getClassMetadata().getIdentifier(object, session);

        return id != null ? id : super.generate(session, object);

    }

}

練習(xí)的答案(根據(jù)要求使用裝飾器模式),未經(jīng)過實(shí)際測(cè)試:


public class UseExistingOrGenerateIdGenerator implements IdentifierGenerator, Configurable {


    private IdentifierGenerator defaultGenerator;


    @Override

    public void configure(Type type, Properties params, Dialect d) 

                        throws MappingException;

        // For example: take a class name and create an instance

        this.defaultGenerator = buildGeneratorFromParams(

                params.getProperty("default"));

    }


    @Override

    public Serializable generate(SessionImplementor session, Object object)

                        throws HibernateException {

        Serializable id = session.getEntityPersister(null, object)

                      .getClassMetadata().getIdentifier(object, session);

        return id != null ? id : defaultGenerator.generate(session, object);

    }

}


查看完整回答
反對(duì) 回復(fù) 2019-09-24
?
HUX布斯

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊

更新LaurentGrégoire對(duì)于休眠5.2的答案,因?yàn)樗坪跤兴摹?/p>


public class UseExistingIdOtherwiseGenerateUsingIdentity extends IdentityGenerator {


    @Override

    public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {

        Serializable id = session.getEntityPersister(null, object).getClassMetadata().getIdentifier(object, session);

        return id != null ? id : super.generate(session, object);

    }

}

并像這樣使用它:(替換包名)


@Id

@GenericGenerator(name = "UseExistingIdOtherwiseGenerateUsingIdentity", strategy = "{package}.UseExistingIdOtherwiseGenerateUsingIdentity")

@GeneratedValue(generator = "UseExistingIdOtherwiseGenerateUsingIdentity")

@Column(unique = true, nullable = false)

protected Integer id;


查看完整回答
反對(duì) 回復(fù) 2019-09-24
  • 3 回答
  • 0 關(guān)注
  • 766 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)