2013-07-29 91 views
1

我需要設置2個獨立的數據庫。一個用於Test類,另一個用於TestTwo類,但我不知道如何配置application.conf文件。如何在Play Framework中設置2個MySQL數據庫?

application.conf(第1部分):

db.default.driver=com.mysql.jdbc.Driver 
db.default.url="jdbc:mysql://localhost/dbone?characterEncoding=UTF-8" 

db.dbtwo.driver=com.mysql.jdbc.Driver 
db.dbtwo.url="jdbc:mysql://localhost/dbtwo?characterEncoding=UTF-8" 


失敗的嘗試1:這兩個類得到保存到數據庫1(dbone):
application.conf(部分2):

ebean.default="*" 
ebean.dbtwo="models.TestTwo" 


失敗嘗試2:嘗試保存某些內容時出現錯誤NG:

[PersistenceException: The type [class models.TestTwo] is not a registered entity? If you don't explicitly list the entity classes to use Ebean will search for them in the classpath. If the entity is in a Jar check the ebean.search.jars property in ebean.properties file or check ServerConfig.addJar().] 

application.conf(部分2):

ebean.default="models.Test" 
ebean.dbtwo="models.TestTwo" 


我如何設定讓測試對象被保存到dbone和TestTwo對象dbtwo?


編輯:TestTwo類的要求(沒有什麼特別的,我沒有手動比application.conf文件分配Ebean服務器,其他):

package models; 
import javax.persistence.*; 
import play.db.ebean.*; 
import play.data.validation.Constraints.Required; 

@Entity 
public class TestTwo extends Model{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public Long id; 

    @Required 
    public String testString; 

    public static Model.Finder<Long, TestTwo> find = new Model.Finder<Long, TestTwo>(Long.class, TestTwo.class); 

    public static TestTwo create (String testString){ 
     TestTwo test = new TestTwo(); 
     test.testString = testString; 
     test.save(); 
     return test; 
    } 
} 
+0

請再展示一些代碼,特別是用於保存實體的代碼。 –

+0

配置看起來不錯,它可能是你的代碼中的東西。我不完全確定你是否可以爲每個類指定數據庫,我只用它作爲包。你可能想試試這個。 – nylund

+0

增加了TestTwo類。 –

回答

0

我有同樣的問題,這問題是我可以在任何地方找到的唯一相關主題。我所做的解決這個問題的做法並不是很好,但是我將所有屬於非默認ebean服務器的模型類覆蓋了save() - ,delete()update()-方法。這些覆蓋分別稱爲super.save(dbname),super.delete(dbname)super.update(dbname),其中dbname是ebean服務器的名稱。

在啓動時,我將名稱從配置中取出並保存,以便它們不是硬編碼的。儘管看起來很冗餘,但它爲我解決了這個問題。我希望它能幫助像我一樣徘徊在這個問題後的其他人!

0

您是否編寫了進化腳本?如果沒有,你需要寫一個在conf>evolutions>default>1.sql

創建表 'testtwo':

create table testtwo(
    id   bigint auto_increment not null, 
    testString  varchar(100) not null, 
    constraint t1_testTwo primary key(id) 
); 

而且:當您刷新瀏覽器

SET FOREIGN_KEY_CHECKS=0; 

drop table if exists testto; 

SET FOREIGN_KEY_CHECKS=1; 

,玩會問到 「應用進化」,這將在您的數據庫中創建'testtwo'表,您可以在其中保存實體。

相關問題