小编Bre*_*ret的帖子

尝试创建模型时,"rails generate"命令会挂起

我是rails的新手,今天早上决定抛弃我的整个数据库设计/模型并重新开始.作为一个菜鸟,我肯定做错了.

我删除了所有文件db/migrate/并删除了表格.当我试图生成第一个新的模型类时,rails就挂了.在我赶上^ C然后尝试别的东西之前,在杂草中关闭了10分钟.

这一次,我再次删除了表格,将整个项目移动到project.bad并运行rails new重新开始.再次,在使用旧名称生成新项目之后,它挂起了rails generate命令(我使用相同的项目名称).

无奈之下,我尝试在同一根中创建一个新项目,但使用另一个名称.找到了!这就像一个冠军,创建控制器和模型类,但我完全无法使用原始项目名称,原始项目或任何新创建的项目生成任何内容.为了让这个工作再次起作用,我错过了什么?我不介意在这一点完全失去,但我希望能够再次使用原始项目名称!

这是log/development.log的样子:

   (255.5ms)  CREATE TABLE `schema_migrations` (`version` varchar(255) NOT NULL) ENGINE=InnoDB
   (337.7ms)  CREATE UNIQUE INDEX `unique_schema_migrations`  ON `schema_migrations` (`version`) 
  ActiveRecord::SchemaMigration Load (0.2ms)  SELECT `schema_migrations`.* FROM `schema_migrations`
   (0.2ms)  SELECT `schema_migrations`.`version` FROM `schema_migrations`
Run Code Online (Sandbox Code Playgroud)

知道在最后一次SELECT之后应该发生什么吗?

ruby-on-rails ruby-on-rails-4

56
推荐指数
4
解决办法
1万
查看次数

使用JAXB将子类实例作为超类传递

我所拥有的是一组表示消息类型的Java类(接近25个).它们都继承自我想要抽象的Message类.每种消息类型都会向Message超类提供的集合中添加一些其他字段.

我正在使用RESTeasy实现一些RESTful Web服务,并希望有这样的方法:

public Response persist(Message msg) {
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    try {
        em.persist(msg);
    } catch (Exception e) {
        e.printStackTrace();
    }
    tx.commit();
    em.close();
    return Response.created(URI.create("/message/" + msg.getId())).build();
}
Run Code Online (Sandbox Code Playgroud)

而不是有25个单独的持久化方法,每个方法都适合特定的消息类型.

目前,我已经注释了我的Message类,如下所示:

@MappedSuperclass
@XmlRootElement(name = "message")
public abstract class Message implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Integer id;
    @Embedded
    Header header;
    @Embedded
    SubHeader subHeader;
Run Code Online (Sandbox Code Playgroud)

我的子类看起来像这样:

@Entity
@XmlRootElement(name="regmessage")
@XmlAccessorType(XmlAccessType.FIELD)
public class REGMessage extends Message {

    @XmlElement(required = true)
    int statusUpdateRate;
    @XmlElement(required = true)
    int networkRegistrationFlag;
Run Code Online (Sandbox Code Playgroud)

这会创建一个看起来应该工作的模式,但是在持久化操作期间在服务器端看到的所有内容都是Message对象(子类型完全丢失,或者至少它没有被编组回其正确的子类型).在客户端,要调用方法,我这样做:

REGMessage msg …
Run Code Online (Sandbox Code Playgroud)

java hibernate jaxb resteasy

10
推荐指数
1
解决办法
1万
查看次数

如何将Java中的二维矩阵映射到Hibernate/JPA?

我有一个遗留数据库,我正试图重新设计到21世纪.现有数据结构之一涉及包含二维值矩阵的特定类.如果我要从数据库中对这个类进行逆向工程,我最终会得到一系列属性,例如:

private BigDecimal NODE_1_MATRIX_POS_1_1;
private BigDecimal NODE_1_MATRIX_POS_1_2;
Run Code Online (Sandbox Code Playgroud)

等等.由于这是一个6x6矩阵,因此有很多这样的列.

我一直在寻找更好的方法,但我不确定我在那里.我想做的是这样的事情:

@Entity
public class TestClass {

    @Id
    private long id;

    @CollectionOfElements
    @JoinTable(
        name="MATRIX_DATA", 
        joinColumns=@JoinColumn(name="ENTRY_ID"))
    private List<List<BigDecimal>> matrix;
Run Code Online (Sandbox Code Playgroud)

但这失败了:

org.hibernate.MappingException: Could not determine type for: java.util.List, at table: MATRIX_DATA, for columns: [org.hibernate.mapping.Column(element)]
Run Code Online (Sandbox Code Playgroud)

而不是仅仅试图修复错误,我想我会四处询问并尝试找到解决此映射挑战的正确方法.有没有人通过JPA找到成功和满意度映射多维数组?

java hibernate jpa multidimensional-array

9
推荐指数
2
解决办法
4644
查看次数

在Flask/WTForms中创建具有不同数量的重复子表单的表单

我的模型目前有三个相关的对象(还有更多,但只有三个与此问题相关).用户,网络和电子邮件.我希望能够做的是拥有一组定义的网络,并允许每个用户在每个网络上都有一个电子邮件地址(这些稍微复杂一点,但我已将它们减少到我认为相关的内容) .

class User(UserMixin, db.Model):
    """
    The User object.
    """
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    #    email = db.Column(db.String(64), unique=True, index=True)
    username = db.Column(db.String(64), unique=True, index=True)
    password_hash = db.Column(db.String(128))
    firstname = db.Column(db.String(64))
    lastname = db.Column(db.String(64), unique=False, index=True)
    email = db.relationship('Email', backref='user')

class Network(db.Model):
    __tablename__ = 'networks'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), index=True)
    emails = db.relationship('Email', backref='network', lazy='dynamic')

class Email(db.Model):
    __tablename__ = 'emails'
    id = db.Column(db.Integer, primary_key=True)
    network_id = db.Column(db.Integer, db.ForeignKey('networks.id'))
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    address = …
Run Code Online (Sandbox Code Playgroud)

python flask flask-wtforms

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

如何在Hibernate/Oracle中使用正则表达式

我正在尝试实现一个接受字符串列表的Web服务,每个字符串都是一个正则表达式.这些需要与数据库的六列进行比较,并且需要返回任何匹配的行.

我相信Oracle有一个我可以使用的regexp_like()函数,但是我正在寻找使用Hibernate 的最佳方法,所以我不反对持久性引擎.

我从这样开始,其中参与者集合包含正则表达式:

List<Message> messages = new ArrayList<Message>();
List<Message> m1 = ((Session) entityManager.getDelegate())
    .createCriteria(MessageSSR.class).add(Restrictions.or(
            Restrictions.in("Node2Id", participants),
            Restrictions.in("Node2Id", participants))).list();
List<Message> m2 = ((Session) entityManager.getDelegate())
    .createCriteria(MessageSSR.class).add(Restrictions.or(
            Restrictions.in("Node3Id", participants),
            Restrictions.in("Node4Id", participants))).list();
List<Message> m3 = ((Session) entityManager.getDelegate())
    .createCriteria(MessageSSR.class).add(Restrictions.or(
            Restrictions.in("Node5Id", participants),
            Restrictions.in("Node6Id", participants))).list();
messages.addAll(m1);
messages.addAll(m2);
messages.addAll(m3);
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为"in"不会做我想要的,这似乎不告诉Hibernate使用正则表达式匹配.

这是我提出的唯一答案,但看起来很难看:

List<Message> messages = new ArrayList<Message>();
for (String re : participants) {
    List<Message> m1 = ((Session) entityManager.getDelegate())
        .createCriteria(MessageSSR.class)
        .add(Restrictions.or(
                Restrictions.sqlRestriction("regexp_like(NODE_1, " + re + ")"),
                Restrictions.sqlRestriction("regexp_like(NODE_2, " + re + ")")
        )).list();
    List<Message> m2 = …
Run Code Online (Sandbox Code Playgroud)

regex sql oracle hibernate seam

4
推荐指数
1
解决办法
7949
查看次数