标签: hibernate-mapping

在Hibernate中映射本地化字符串 - 任何最佳实践?

我正在编写一个必须本地化所有String属性的应用程序,即它们必须为每个可用的Locale存储不同的值.一个快速的解决方案是使用Map,它可以在Hibernate中轻松映射,但对Java程序员来说不是很好:

public class Product {
   private Map<Locale, String> description;
   private Map<Locale, String> note;
Run Code Online (Sandbox Code Playgroud)

因此,我实现了一个LocalString对象,可以为不同的语言环境保存不同的字符串:

public class LocalString {
   private Map<Locale, String> localStrings;
Run Code Online (Sandbox Code Playgroud)

域对象变为

public class Product {
   private LocalString description;
   private LocalString note;
Run Code Online (Sandbox Code Playgroud)

如何使用Hibernate注释最好地映射这些对象?

我认为最好的映射将使用LocalString作为组件完成:

@Embeddable
public class LocalString {
    private Map<Locale, String> localStrings;

    @ElementCollection
    public Map<Locale, String> getLocalStrings() {
       return localStrings;
    }
Run Code Online (Sandbox Code Playgroud)

...

@Entity
public class Product {
   private Long id;
   private LocalString description;
   private LocalString note;

   @Embedded
   public LocalString getDescription() {
          return description;
   }
Run Code Online (Sandbox Code Playgroud)

到目前为止一切正常:hbm2ddl ant任务创建了两个表,一个"Products"表和一个"Products_localStrings"表,其中包含键和值列.当我为第二个属性添加getter时,一切都会中断:

   @Embedded
   public …
Run Code Online (Sandbox Code Playgroud)

schema hibernate localization internationalization hibernate-mapping

8
推荐指数
1
解决办法
3441
查看次数

如何对Embeddable实体属性强制执行验证约束?

我有一个带有Email集合属性的Person实体:

@ElementCollection
@CollectionTable(schema="u",name="emails",joinColumns=@JoinColumn(name="person_fk"))
@AttributeOverrides({
    @AttributeOverride(name="email",column=@Column(name="email",nullable=false)),
})
public List<EmailU> getEmails() {
    return emails;
}
Run Code Online (Sandbox Code Playgroud)

在我的Email类中,我尝试使用@Email注释电子邮件:

@Embeddable
public class EmailU implements Serializable {
    private String email;

    public EmailU(){
    }

    @Email
    public String getEmail() {
        return email;
    }
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我的方法应该是什么?

java validation annotations hibernate hibernate-mapping

8
推荐指数
1
解决办法
2286
查看次数

为什么我需要第三个表进行多对多映射?为什么我不能只使用两张桌子?

我一直在试图many to many两个类之间的关系PersonAddress.我不知道,但在某个地方我并没有按照正确的方向思考.例如,对于多对多映射,我制作了两个表

CREATE TABLE person(p_id INTEGER,p_name TEXT,PRIMARY KEY(p_id));
CREATE TABLE address(a_id INTEGER,address TEXT);
Run Code Online (Sandbox Code Playgroud)

然后我在映射xml中尝试了一些东西.经过一些不成功的尝试后,我读到你需要三个表进行多对多的映射,就像我的一个问题的答案所说的那样.

请解释一下这个原因?为什么我需要第三张桌子?为什么我不能只与两个表建立关联?

java many-to-many hibernate hibernate-mapping

8
推荐指数
2
解决办法
2870
查看次数

如何将不同记录的数据添加到单个记录中?

如果没有时间,请看一下这个例子

我有两种类型的用户,临时用户和永久用户.

临时用户使用系统作为访客只需提供他们的名字并使用它,但系统需要跟踪它们.

永久用户是那些已注册且永久的用户.

一旦用户为自己创建永久记录,我需要将用户作为访客时被跟踪的所有信息复制到他的永久记录中.

课程如下,

@Entity
public class PermUser{
    @Id
    @GeneratedValue
    private long id;

    @OneToMany
    private List Favorites favorites;    
    ....

}

@Entity
public class Favorites {
    @Id
    @GeneratedValue
    private long id;

    @OneToMany (cascade = CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List <FavoriteItems> items;

    ...
 }

 @Entity
   public class FavoriteItems {
     @Id
     @GeneratedValue
     private long id;

     private int quantity;

     @ManyToOne
     private Ball ball;
     ..
   }


@Entity
public class TempUser extends PermUser{
    private String date;
    ....
}
Run Code Online (Sandbox Code Playgroud)

问题是:

如果我克隆tempUser对象,我也会复制id参数,所以当保存perm用户对象时,它会显示一条消息,如"密钥条目'10'为密钥...",我无法先删除tempUser然后保存permUser就像保存permUser失败一样,我将错过数据.如果我尝试单独复制每个最喜欢的球项而没有项目ID,那么这将不是一种有效的方法.

示例(一句话中的问题:如图所示,用户可能有多个TempUser记录和一个PermUser记录,因此我需要将所有TempUser记录的信息添加到该单个PermUser记录中.)

  Type of …
Run Code Online (Sandbox Code Playgroud)

java hibernate hibernate-mapping java-ee

8
推荐指数
1
解决办法
1003
查看次数

是否可以在JPA持久性单元中定义一个名为的重复生成器?

我的情况在这里描述:

eclipse在此持久性单元中定义的名为"ID_GENERATOR"的重复生成器

但是我的问题是不同的,所选答案并没有解决它:

" 有多个@SequenceGenerator 具有相同的名称是否有效,即使它用于此目的Hibernate:如何覆盖映射超类的属性 "

如果无效,还有替代方案吗?

非常感谢您的回答.

java orm hibernate jpa hibernate-mapping

8
推荐指数
1
解决办法
6052
查看次数

如何使用<join>标签加入hibernate映射文件中的两列?

我需要将单个类映射到两个表(两个表都有多列主键).假设TABLE1具有id1,id2,id3,并且TABLE2具有id1,id2作为主键.现在编写映射文件时,我会执行以下操作:

<hibernate-mapping package="beans">
  <class name="TABLE1Class" table="TABLE1">
    <composite-id name="table1PK" class="TABLE1PKClass">
        <key-many-to-one name="id1" class="ID1Class" column="id1"/>
        <key-many-to-one name="id2" class="ID2Class" column="id2"/>
        <key-many-to-one name="id3" class="ID3Class" column="id3"/>
    </composite-id>
    <property name="someProperty" type="integer" not-null="true" column="x"/>
    <join table="TABLE2">
        <key column="id1" />
        <!-- <key column="id2"/> The join tag accepts only one key tag!!! 
How do I map the second key??? -->
        <property name="propertyFromTable2" type="float" not-null="true"/>
    </join>
  </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

如您所见,join标记只接受一个键标记!如何映射第二个ID?

亲切的问候,
暴君
PS:圣诞快乐,快乐和富有成效的新年;)

java hibernate join hibernate-mapping composite-primary-key

7
推荐指数
1
解决办法
4805
查看次数

使用innerjoin进行Hibernate更新查询

我有内部联接的以下MySQL更新查询:

 UPDATE Country AS c
 INNER JOIN  State s ON c.CountryID = s.CountryID
 INNER JOIN  City cy On s.StateID = cy.StateID
 SET  c.Active='Y', s.Active='Y',cy.Active='Y'
 WHERE  c.CountryID='12'
Run Code Online (Sandbox Code Playgroud)

这是我的国家地图类

enter code here
@Entity
@Table(name = "Country")
public class Country {
public Country() {
}

@Id
@Column(name = "CountryID")
private String countryID;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "country")
private Set<State> state = new HashSet<State>(0);

@Column(name = "CountryName")
private String countryName;
}
Run Code Online (Sandbox Code Playgroud)

国家的Mpping课程

 @Entity
 @Table(name = "State")
 public class State {
public State() { …
Run Code Online (Sandbox Code Playgroud)

hibernate inner-join hibernate-mapping hibernate-criteria

7
推荐指数
1
解决办法
5344
查看次数

java.security.AccessControlException:拒绝访问(java.lang.RuntimePermission modifyThreadGroup)

我在使用自己的数据库服务器和Google Web应用程序时遇到问题.

我使用eclips(java EE IDE),安装了所有google插件init,并开发了一个示例google web应用程序,将其部署到web.Its正常工作.

现在我想在我的应用程序中使用自己的数据库.(MYSQL安装在localhost中).这里使用Hibernate连接数据库.所有必需的jar文件都放在WEB目录下的lib目录中.

当我运行我的应用程序时,它会给出一个错误...

com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: Error for /Home
java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:57)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)
    at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:397)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2006)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1289)
    at base.Trackerlogin.service(Trackerlogin.java:56)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.DevAppServerServersFilter.doDirectRequest(DevAppServerServersFilter.java:369)
    at com.google.appengine.tools.development.DevAppServerServersFilter.doDirectServerRequest(DevAppServerServersFilter.java:352)
    at com.google.appengine.tools.development.DevAppServerServersFilter.doFilter(DevAppServerServersFilter.java:115)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) …
Run Code Online (Sandbox Code Playgroud)

java gwt google-app-engine hibernate hibernate-mapping

7
推荐指数
2
解决办法
9311
查看次数

Hibernate映射:忽略超类字段

我有一个A级和B级

public class A{
int f1;
int f2;
int f2;
}

public class B extends A{
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在映射到B的表中忽略一个字段,例如'f2'?

java orm hibernate hibernate-mapping

7
推荐指数
1
解决办法
3281
查看次数

JPA ManyToMany单向关系

可以说我们有两个实体Entity Node和Entity Cluster。A Cluster有很多Node。一个Node可以属于多个Cluster。因此,Cluster其中有一个@ManyToMany注释。但是Node不知道Cluster它属于哪个(有意)。

当我删除a时,Cluster我想保留它所有的Nodes(将来我可以将它们添加Node到另一个s中Cluster)。所以我不需要 Cascade.DELETE。但是,如果删除a NodeCluster则应更新所有它所属的对象(Node将从中删除它们)。

使用JPA处理此问题的最佳方法是什么?

hibernate jpa hibernate-mapping spring-data

7
推荐指数
2
解决办法
3648
查看次数